readLine() beim blockieren schlafend?
lima-city → Forum → Programmiersprachen → Java
aktives warten
bsd
daten
design
enormen unterschied
fragen
fragestellung
funktion
fhre
prozess
prozessorauslastung
prozessorleistung
schlecht gel
situation
socket
verbraucht vielen dank
verschwendung
warte
warten
wrde
-
Hi,
ich wuerde gerne wissen, ob readLine() waehrend des Wartevorgangs schlaeft oder durch aktives Warten Ressourcen verbraucht.
Vielen Dank -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Welcher Wartevorgang?
Ich w?rde mal sagen solange der Stream nicht geschlossen ist, sind alle assozierten Resourcen im gebrauch und somit wird solange du den Stream nicht schlie?t auch Resourcen verbraucht. -
Nat?rlich verbraucht die Funktion auch Ressourcen, wenn sie schl?ft. Es ging mir da eher um Prozessorauslastung. Da gibt es ja einen enormen Unterschied zwischen aktivem Warten, wo die Funktion immer wieder den Socket abfragt und blockierendem Warten, wo das Programm schl?ft und die CPU nicht verbraucht.
-
Um mal die Problemativ festzustellen... was genau willst oder machst du?
Beim ersten Post dachte ich an eine Filetransaktion, nun schreibst du was von Sockets. Was genau ist die Situation? Generell sollte man die Socket Verbindung immer schlie?en nachdem alles transferiert ist. -
Ich habe eine Socketverbindung. Auf dieser fuehre ich readLine() aus. Da ich damit warte, bis am Socket etwas ankommt, kann es passieren, dass ich mit readLine() durchaus eine Weile warten muss. Fuer mich ist es also wichtig zu wissen, ob ich in der Zeit, wo ich am Socket warte, Prozessorleistung verbrauche.
Wenn die Funktion aber den Prozess schlafen legt und auf ein Signal wartet, ordnet der Scheduler meinem Prozess ja keinen Zeitslot zu und ich blockiere den Prozessor nicht. -
?hm, dann ist etwas in deinem Design sehr schlecht gel?st. Dein Socket sollte ja nur etwas lesen, wenn er dazu aufgefordert wird. Ansonsten kann er horchen ob vom Server was kommt und ist dann halt im Idle.
Alles andere w?re Verschwendung. -
evil-devil schrieb:
?hm, dann ist etwas in deinem Design sehr schlecht gel?st. Dein Socket sollte ja nur etwas lesen, wenn er dazu aufgefordert wird. Ansonsten kann er horchen ob vom Server was kommt und ist dann halt im Idle.
Alles andere w?re Verschwendung.
Ganz im Gegenteil. Blockierende Sockets verbrauchen weniger Ressourcen als nicht blockierende, da bei nicht blockierenden ?ber Poll-Verfahren der Status der Verbindung immer wieder abgefragt werden muss.
Zur urspr?nglichen Frage:
Soweit ich weiss, bauen die Socketfunktion in Java auch auf BSD-Sockets auf, was f?r deine Fragestellung bedeutet, dass du im blockierenden Modus am wenigsten (n?mlich fast gar keine) Ressourcen verbrauchst. -
Naja, bei einem Chat programm w?re es fatal nicht zu pollen, da man dann ganz schnell Datenverpassen w?rde.
-
Du verpasst Daten weder im blockierenden Modus noch im nicht blockierenden. Hat damit nichts zu tun (ausser du machst beim Pollen Fehler).
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage