作者lalaboom (lalaboom)
看板LinuxDev
標題[問題] pipe buffer大小
時間Tue Mar 24 23:02:29 2015
大家好
我有一隻程式會一直產生資料,
透過pipe write寫到另一隻程式去,
但是另一隻call pipe read 的速度比較慢,
導致write端會block住 (goole查詢buffer大小為4K?),
有嚐試 write end 設成 nonblock,
但也只是return -1(try again)給我,
因為資料會一直產生,但因為上述原因導致丟資料,
請問我該如何設計呢?
改成FIFO會有幫助嗎?
謝謝 ~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.16.209
※ 文章網址: https://webptt.com/m.aspx?n=bbs/LinuxDev/M.1427209352.A.170.html
1F:推 asilzheng: 先解決 read 的速度問題吧,為什麼他比較慢是可接受的? 03/24 23:38
2F:→ lalaboom: 因為需要計算複雜的東西,基本上read端速率無法更改XD 03/25 00:15
3F:→ james732: read端不能先把資料收下來再算嗎? 03/25 11:39
4F:→ lalaboom: 因為read end code不能改,只能在write end想辦法 03/25 12:53
5F:→ jaw109: 如果真的來不及那就只能把資料讀出來丟掉 03/25 20:42
6F:→ leolarrel: write 端的程式要有"水庫"的概念,把來不及的送的東西 03/27 15:29
7F:→ leolarrel: 暫放起來 03/27 15:29
8F:→ leolarrel: write端程式寫兩個程序或執行緒,一個專門儲存資料,一個 03/27 15:32
9F:→ leolarrel: 專門把資料往管線丟.這概念十分簡單,最明顯的例子就是 03/27 15:33
10F:→ leolarrel: youtube的播放進度條 03/27 15:35
11F:→ lalaboom: 謝謝Leo大,目前正是採取這種做法,但也因為muti thread 03/29 02:06
12F:→ lalaboom: 產生的問題需要把兩端lock起來,所以效率有些降低 03/29 02:06