[問題] pipe buffer大小

作者: lalaboom (lalaboom)   2015-03-24 23:02:29
大家好
我有一隻程式會一直產生資料,
透過pipe write寫到另一隻程式去,
但是另一隻call pipe read 的速度比較慢,
導致write端會block住 (goole查詢buffer大小為4K?),
有嚐試 write end 設成 nonblock,
但也只是return -1(try again)給我,
因為資料會一直產生,但因為上述原因導致丟資料,
請問我該如何設計呢?
改成FIFO會有幫助嗎?
謝謝 ~
作者: asilzheng (asil)   2015-03-24 23:38:00
先解決 read 的速度問題吧,為什麼他比較慢是可接受的?
作者: lalaboom (lalaboom)   2015-03-25 00:15:00
因為需要計算複雜的東西,基本上read端速率無法更改XD
作者: james732 (好人超)   2015-03-25 11:39:00
read端不能先把資料收下來再算嗎?
作者: lalaboom (lalaboom)   2015-03-25 12:53:00
因為read end code不能改,只能在write end想辦法
作者: jaw109   2015-03-25 20:42:00
如果真的來不及那就只能把資料讀出來丟掉
作者: leolarrel (真.粽子無雙)   2015-03-27 15:29:00
write 端的程式要有"水庫"的概念,把來不及的送的東西暫放起來write端程式寫兩個程序或執行緒,一個專門儲存資料,一個專門把資料往管線丟.這概念十分簡單,最明顯的例子就是youtube的播放進度條
作者: lalaboom (lalaboom)   2015-03-29 02:06:00
謝謝Leo大,目前正是採取這種做法,但也因為muti thread產生的問題需要把兩端lock起來,所以效率有些降低

Links booklink

Contact Us: admin [ a t ] ucptt.com