/ / Ist das Lesen / Schreiben einer Pipe eine teure Operation? - c, linux, Rohr

Ist das Lesen / Schreiben einer Pipe eine teure Operation? - c, linux, Rohr

Im Rahmen meines Uni - Kurses wurde uns gezeigt, wie man Pipes für die Kommunikation zwischen Prozessen verwendet pipe() und fork()) für ein paar kleine Übungen. Keine Probleme, es zur Arbeit oder mit dem Konzept zu bringen, aber außerhalb dieser Anforderungen frage ich mich, wie effizient es ist, mit einem Rohr dieser Art zu schreiben und zu lesen?

Wenn ich einen Wert habe, den ich in einen Block von 4 Bytes packe, ist es besser, 100 Werte (also 400 Bytes) auf einmal zu packen und zu schreiben?

Oder ist die Leistung vergleichbar, wenn ich 100 jeweils 4 Bytes schreibe?

Verhindert das Piping von 400 Bytes auf einmal dieEmpfänger alles tun, bis der Schreibvorgang abgeschlossen ist - vorausgesetzt, der Empfänger versucht nur, die ersten 4 Bytes zu lesen, wird er dies tun können, nachdem sie geschrieben wurden, aber bevor alle 400 beendet sind?

Antworten:

4 für die Antwort № 1

Pipes werden ähnlich wie Dateien behandelt (natürlichSie sind nicht auf der Platte. Sie sind auf die gleiche Weise gepuffert, und der Griff zu ihnen ist ähnlich behandelt. Versuchen Sie nicht, manuell für ein Rohr zu puffern; Das tut es schon. Wenn Sie sich wirklich Sorgen machen, können Sie beide Möglichkeiten ausprobieren und einige Laufzeiten sammeln. Ich würde vorschlagen, nur Blöcke von 4 Bytes zu schreiben, wie Sie sie haben. Versuchen Sie nicht zu optimieren, es sei denn, Sie wissen, dass da ein Problem ist.


1 für die Antwort № 2

Ich kann dir eine Anekdote erzählen. Ich habe einmal an einem Web-System für eine Embedded-Linux-Plattform gearbeitet. Wir haben Pipes für die interne Kommunikation ausprobiert, weil sie viel schneller waren als UNIX Socket oder TCP Sockets. Am Ende haben wir sowieso Steckdosen benutzt, weil sie in unserer Anwendung einfacher waren. (Wir brauchten Kommunikation in beide Richtungen und Rohre sind nur eine Möglichkeit.)