我寫的網絡守護進程,在Linux內核2.6,其中有 一個生產者進程和消費者氮處理,不使對數據進行任何改變,而不會產生任何響應回製片人。具有共享內存結果的進程之間進行通信零拷貝?
只要生產者進程生成一個數據對象,其長度從幾個10字節到幾十K字節不等,就必須將數據對象傳遞給一個可用的使用者進程。
第一次,我考慮使用一個命名/無名PIPE。但是,它們將成爲內存複製開銷。
- 生產者的用戶空間緩衝--copy - >內核空間的管道緩衝區
- 內核空間的管道緩衝區--copy - >消費者的用戶空間緩衝
由於程序可能與低延遲的大量同伴一起工作,複製開銷可能是有害的。因此,我決定在mmap()中使用POSIX共享內存。
如果使用過程之間共享數據POSIX共享內存使用mmap()不會導致任何存儲器複製,不像PIPE我只是想知道。
另外,是否有任何其他方式來共享進程之間的數據,但結果零拷貝? 該程序將在Linux上運行,最近版本的內核爲 ,可能不需要具有跨平臺功能。
我決定不爲每個消費者/產品產卵/運行一個線程,而是由於設計問題導致進程 。
感謝您的回覆。
確定進程之間移動大量數據不是「過早優化」,而是「必要的體系結構」。並不是所有的優化(或設計或架構)都「不成熟」。 – 2013-12-10 01:04:34