Fork vor oder nach dem Akzeptieren von Verbindungen?

8

Das folgende Code-Snippet erstellt vier Prozesse, die sich alle den gleichen Listening-Socket teilen.

Besteht hier eine Gefahr? Sollte ich immer einen Abhörprozess und eine Abzweigung haben, nachdem Verbindungen auf herkömmliche Weise akzeptiert wurden?

%Vor%

(Ich verstehe, dass Forken nach dem Akzeptieren es einem Programm ermöglicht, einen Prozess pro Verbindung durchzuführen. Ich spiele mit Proto-Threads und verschiedenen asynchronen Dingen herum, also suche ich nur einen Prozess pro Kern.)

    
fadedbee 14.10.2009, 20:28
quelle

1 Antwort

10

Sie können es auf jede Art tun.

Wie Sie bemerken, ist die Verzweigung nach der Annahme ein Kind pro Client / Verbindung. Das Abzweigen vor dem Akzeptieren (aber nach dem Abhören) wird im Allgemeinen als Pre-Forking bezeichnet. Jedes der Kinder wartet auf das Akzeptieren und jedes Kind, das die eingehende Verbindung erhält, verarbeitet es. Dies ist sicher, solange das Akzeptieren vom Kernel ausgeführt wird, was (wie ich glaube) jedes moderne Unix tut. Wenn nicht, müssen Sie eine Art IPC (Mutex, etc.) Sperre um das Akzeptieren setzen. Der Vorteil beim Pre-Forking besteht darin, dass Sie nicht für jede Verbindung die Kosten eines Forks aufwenden müssen. Sie haben bereits einen vorhandenen Pool.

    
Duck 14.10.2009, 21:38
quelle

Tags und Links