Im Blocking-Modus wird diese bestimmte Aufgabe in einen "Process Wait" -Zustand versetzt, da ich denke, dass nicht-blockierende Sockets explizit eine "busy-wait" - oder "spin-lock" -Implementierung vom Benutzer erfordern. Oder blockierende Modus-Sockets sind nichts anderes als implizite Implementierungen von busy-wait vom Kernel.Wie funktioniert der Blocking-Modus in Unix/Linux Sockets?
In Mechanismen wie Semaphore/mutexes Sperren/Monitore eine Sperre in der Regel durch Drücken der Aufgabe in blockierten Zustand erreicht. Ich denke, wenn solche Dinge mit Verriegelung möglich sind, dann könnte die Verriegelung auch auf die gleiche Weise erreicht werden.
ich nicht sicher weiß, ich denke, Polling kein effizienter Weg ist, besonders für den Kernel, wie der Kernel immer alle Hände voll mit so vielen Aufgaben hat.
thx.
@Chris - Was ist "beiseite gelegt". Ein Prozess muss in einem der Staaten sein. Mit "beiseite legen" meinst du Wartezustand, aber das was ich in der Frage gefragt habe. Ich selbst habe keine Ahnung, da ich denke, dass das Polling kein effizienter Weg ist, besonders für den Kernel, vor allem dann, wenn der Kernel immer seine Hände voll mit so vielen Aufgaben hat. –
Wenn eine blockierende Socket-Operation blockiert wird, befindet sich der Prozess im Ruhezustand ("S" in der STAT-Spalte von ps). – mark4o
"Durch beiseite legen" Ich denke Chris bedeutet, dass das Betriebssystem es auf die Liste der Prozesse setzen wird, die auf Eingabe warten. Der Prozess wird vom Betriebssystem nicht geweckt, bis es ein Paket empfängt, das an den Port gerichtet ist, der an den Socket gebunden ist, der gerade gelesen wird. – cygil