2010-10-13 70 views
3

作爲我的Uni課程的一部分,我們已經顯示並要求使用管道在流程(使用pipe()fork())之間進行通信以進行一些小練習。沒有問題得到它的工作或概念,但在這些要求之外,我想知道用這種類型的管道寫入和讀取的效率如何?正在讀取/寫入管道的昂貴操作?

如果我有一些價值,我打包到一個4字節的塊,是一次打包和寫入100個值(如400字節)更好?

或者如果我寫100個4字節的每個字節,性能是否可比?

一次性傳輸400字節會阻止接收者在寫入完成之前執行任何操作 - 假設接收者只是嘗試讀取前4個字節,寫入後能夠這樣做,但之前全部400完成?

回答

4

管道的處理與文件類似(當然,它們不在磁盤上)。它們以一些相同的方式進行緩衝,並且對它們的處理也被類似地處理。不要嘗試手動緩衝管道;它已經做到了。如果你真的關心它,你可以嘗試兩種方式並收集一些運行時間。我建議你只寫4個字節的塊,因爲你有它們。 除非您知道存在問題,否則不要嘗試優化。

+0

這更像是一種好奇而不是關切,而這正是我希望得到的答案。謝謝! – DMA57361 2010-10-13 11:11:03

1

我可以告訴你一個軼事。我曾經在一個嵌入式Linux平臺的Web系統上工作過。我們嘗試使用管道進行內部通信,因爲它們比UNIX套接字或TCP套接字快得多。最後,我們仍然使用套接字,因爲它們在我們的應用程序中使用起來更簡單。 (我們需要雙向溝通和管道只有一種方式。)