Ich schreibe ein Programm für POSIX (OSX), wo ich viele Prozesse haben werde, die Nachrichten an einen Listener senden, der im Grunde ein Logging-Thread ist. Alle Prozesse werden in separaten Programmen ausgeführt, und die Verwendung einer einzelnen benannten Pipe (FIFO), in die viele Prozesse schreiben, von der nur ein einzelner Prozess liest, ist sehr verlockend.
1) Wird das funktionieren? - Ich kann dies mit bash machen, um einen Fifo mit mehreren Prozessen zu erstellen, damit ich weiß, dass das funktioniert. Aber gibt es in der Praxis Probleme, die ich beschönige?
Shell # 1
%Vor%Shells # 2 und # 3
%Vor%2) Wenn jeder Writer nur relativ kurze Nachrichten (& lt; 100 Bytes?) schreibt, kann dann angenommen werden, dass jeder Aufruf von write () Willen zum Leser in seiner Gesamtheit gesendet wird? Oder wird die Hälfte einer Nachricht gefährdet sein, mit der Hälfte einer anderen Nachricht eines anderen Schreibers verstümmelt zu werden?
danke für irgendeinen Rat.
Der FIFO-Schreibvorgang sollte atomar sein, solange er unter der Seitengröße liegt. Es sollte also kein Problem mit 100-Byte-Nachrichten geben. Unter Linux war die maximale Größe 4K, ich glaube, es ist jetzt größer. Ich habe diese Technik auf einigen Systemen für die Nachrichtenübergabe verwendet, da die Schreibvorgänge atomar enden.
Wenn Sie eine Reihe von Schreibvorgängen verwenden, kann ein Problem auftreten, da die Pufferung der Ausgabe zu einem Synchronisierungsproblem führen kann. Stellen Sie also sicher, dass die gesamte Nachricht auf einmal geschrieben wird. z.B. Erstellen Sie eine Zeichenfolge, drucken Sie dann, drucken Sie nicht mehrere Stücke gleichzeitig.
%Vor%NICHT
%Vor%Tags und Links named-pipes ipc posix fifo