[問題] pipe buffer大小

看板LinuxDev作者 (lalaboom)時間10年前 (2015/03/24 23:02), 編輯推噓1(1011)
留言12則, 5人參與, 最新討論串1/1
大家好 我有一隻程式會一直產生資料, 透過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://www.ptt.cc/bbs/LinuxDev/M.1427209352.A.170.html

03/24 23:38, , 1F
先解決 read 的速度問題吧,為什麼他比較慢是可接受的?
03/24 23:38, 1F

03/25 00:15, , 2F
因為需要計算複雜的東西,基本上read端速率無法更改XD
03/25 00:15, 2F

03/25 11:39, , 3F
read端不能先把資料收下來再算嗎?
03/25 11:39, 3F

03/25 12:53, , 4F
因為read end code不能改,只能在write end想辦法
03/25 12:53, 4F

03/25 20:42, , 5F
如果真的來不及那就只能把資料讀出來丟掉
03/25 20:42, 5F

03/27 15:29, , 6F
write 端的程式要有"水庫"的概念,把來不及的送的東西
03/27 15:29, 6F

03/27 15:29, , 7F
暫放起來
03/27 15:29, 7F

03/27 15:32, , 8F
write端程式寫兩個程序或執行緒,一個專門儲存資料,一個
03/27 15:32, 8F

03/27 15:33, , 9F
專門把資料往管線丟.這概念十分簡單,最明顯的例子就是
03/27 15:33, 9F

03/27 15:35, , 10F
youtube的播放進度條
03/27 15:35, 10F

03/29 02:06, , 11F
謝謝Leo大,目前正是採取這種做法,但也因為muti thread
03/29 02:06, 11F

03/29 02:06, , 12F
產生的問題需要把兩端lock起來,所以效率有些降低
03/29 02:06, 12F
文章代碼(AID): #1L4No85m (LinuxDev)
文章代碼(AID): #1L4No85m (LinuxDev)