[Java] ideale sleep time voor threads?

Pagina: 1
Acties:

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 23:38
Mijn irc client haalt om de zoveel millieseconden een string af van de irc server (die ik ook zelf geschreven heb) in een aparte thread (ik heb threads voor het zenden van gegevens, lezen van gegevens uit de chatbox, en lezen van server communicatie).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
new Thread(new Runnable() {
            public void run() {
              try {
                Thread.sleep(1000);
              } catch (Exception f) {
                addStatusLine("thread error\n" + f);
              }
              while (connected) {
                try {
                    buffer = c.getData(d.getNick());
                    
                    if (!buffer.equals("")) {
                      addStatusLine(buffer);
                    }
                    
                    connected = d.getConnectedStatus();
                } catch (Exception f) {
                    d.doAbsolutelyNothing();
                }
            
              }
            }
        }
      ).start();

Ik heb deze thread na elke lus 1 seconde laten 'slapen' om de andere clients de kans te geven hun strings af te halen, ze gebruiken allemaal dezelfde methode om dit te doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public String getData(String nick) {
      
      synchronized (data2) {
       
        for (int i = 0; i < userVector.size(); i++) {
           temp2 = userVector.elementAt(i);
           tempUser2 = (User) temp2;
           tempString = tempUser2.getNick();
           
           if (tempString.equals(nick)) {
            someString = tempUser2.getBuffer();
            tempUser2.clearBuffer();
           }
        
        }
       
        return someString;
      
      }
    }

deze methode word aangeboden door de IRC (geschreven in RMI) server. Nu mijn vraag: mag ik de sleep time van de threads verlagen zonder dat de server machine te zwaar belast wordt? En zo ja welke waarde zou hiervoor ideaal zijn?

Clowns to the left of me, Jokers to the right


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

vraag aan jezelf: wat zou het nut zijn om de timer vaker iets te laten doen (Je kan ook naar de java.util.Timer class kijken). Merkt je eind gebruiker er iets van? Ik neem dat het voor een gebruiker niet uitmaakt als er bv 1/5 tot 1/2 seconde verschil tussen zit, en zou dit als minimum aanhouden.

tip1: je zou misschien ook kunnen gaan triggeren. Dit betekend dat er niet automatisch wordt gekeken of je iets te versturen/op te halen hebt (versturen is het eenvoudigste) en daarop jouw verwerk acties op te laten plaats vinden ipv met een thread te gaan kijken of er iets te doen is.

tip2:ik zie dat jij een vector gebruikt om users in op te zoeken, maar je zou hier veel beter een hashmap voor kunnen gebruiken. Een hashmap is een structuur waar je elementen uit op kan halen op basis van bv een naam, of een sofinr. Een hashmap is voor dit soort dingen veel efficienter, kijk maar eens in je javadocumentatie.

vraag: weet je voldoende af van concurrency control en deadlock om dit veilig te kunnen aanpakken. Als je niet oppast dan krijg je straks gekke foutmeldingen.