poll() vs. select() unter Linux, POLLIN/POLLOUT und stdin...
Verfasst: Samstag 12. November 2011, 12:21
Hallo,
ok, meine Fragen sind nicht mehr ganz bei Python und dennoch hier nicht völlig deplatziert:
1. Wenn ich prüfen möchte, ob es auf 'stdin' etwas zum Auslesen gibt, kann ich entweder 'poll()' oder 'select()' verwenden. Die allermeisten Codebeispiele, die 'stdin', 'stdout' oder 'stderr' prüfen, verwenden 'select()', 'poll()' sieht man eigentlich eher dann, wenn es um Abfragen auf Servern geht, wo Performance eine wichtige Rolle spielt.
Meine Frage ist nun: Ist 'poll()' unter Linux ein Wrapper zu 'select()' oder 'select()' ein Wrapper zu 'poll()'?
Oder falls meine Frage falsch gestellt ist: Ich kann mir nicht vorstellen, dass das 'select'-Modul für 'poll()' und 'select()' zwei völlig unterschiedliche Wege geht. Irgendwo muss ja erkannt werden, ob unter dem jeweiligen OS eher ein 'poll()' oder eher ein 'select()' Sinn macht.
2. Immer unter Berücksichtigung, dass ich 'stdin' darauf prüfen möchte, ob es etwas zum Auslesen gibt:
Es hat bisher keine Auswirkung, ob ich via 'poll()' auf 'POLLIN' oder auf 'POLLOUT' prüfe oder 'stdin' via 'select()' an 'rlist' oder 'wlist' übergebe.
Die Doku sagt ja auch zu ...
... select.poll():
POLLIN: There is data to read
POLLOUT: Ready for output: writing will not block
... select.select():
rlist: Wait until ready for reading
wlist: Wait until ready for writing
Ist es aber vor dem Hintergrund von 'stdin' nicht so, dass immer dann, wenn Daten zum Auslesen vorhanden sind gleichzeitig auch Daten zur Ausgabe bereitstehen.
Welchen Fall kann es denn geben, dass nur 'POLLIN' oder nur 'POLLOUT' signalisiert wird?
Oder ist es bei 'stdin' tatsächlich egal, welchen Zustand ich prüfe?
mutetella
ok, meine Fragen sind nicht mehr ganz bei Python und dennoch hier nicht völlig deplatziert:
1. Wenn ich prüfen möchte, ob es auf 'stdin' etwas zum Auslesen gibt, kann ich entweder 'poll()' oder 'select()' verwenden. Die allermeisten Codebeispiele, die 'stdin', 'stdout' oder 'stderr' prüfen, verwenden 'select()', 'poll()' sieht man eigentlich eher dann, wenn es um Abfragen auf Servern geht, wo Performance eine wichtige Rolle spielt.
Meine Frage ist nun: Ist 'poll()' unter Linux ein Wrapper zu 'select()' oder 'select()' ein Wrapper zu 'poll()'?
Oder falls meine Frage falsch gestellt ist: Ich kann mir nicht vorstellen, dass das 'select'-Modul für 'poll()' und 'select()' zwei völlig unterschiedliche Wege geht. Irgendwo muss ja erkannt werden, ob unter dem jeweiligen OS eher ein 'poll()' oder eher ein 'select()' Sinn macht.
2. Immer unter Berücksichtigung, dass ich 'stdin' darauf prüfen möchte, ob es etwas zum Auslesen gibt:
Es hat bisher keine Auswirkung, ob ich via 'poll()' auf 'POLLIN' oder auf 'POLLOUT' prüfe oder 'stdin' via 'select()' an 'rlist' oder 'wlist' übergebe.
Die Doku sagt ja auch zu ...
... select.poll():
POLLIN: There is data to read
POLLOUT: Ready for output: writing will not block
... select.select():
rlist: Wait until ready for reading
wlist: Wait until ready for writing
Ist es aber vor dem Hintergrund von 'stdin' nicht so, dass immer dann, wenn Daten zum Auslesen vorhanden sind gleichzeitig auch Daten zur Ausgabe bereitstehen.
Welchen Fall kann es denn geben, dass nur 'POLLIN' oder nur 'POLLOUT' signalisiert wird?
Oder ist es bei 'stdin' tatsächlich egal, welchen Zustand ich prüfe?
mutetella