看板 LinuxDev 關於我們 聯絡資訊
大家好 我有一隻程式會一直產生資料, 透過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
asilzheng: 先解決 read 的速度問題吧,為什麼他比較慢是可接受的? 03/24 23:38
lalaboom: 因為需要計算複雜的東西,基本上read端速率無法更改XD 03/25 00:15
james732: read端不能先把資料收下來再算嗎? 03/25 11:39
lalaboom: 因為read end code不能改,只能在write end想辦法 03/25 12:53
jaw109: 如果真的來不及那就只能把資料讀出來丟掉 03/25 20:42
leolarrel: write 端的程式要有"水庫"的概念,把來不及的送的東西 03/27 15:29
leolarrel: 暫放起來 03/27 15:29
leolarrel: write端程式寫兩個程序或執行緒,一個專門儲存資料,一個 03/27 15:32
leolarrel: 專門把資料往管線丟.這概念十分簡單,最明顯的例子就是 03/27 15:33
leolarrel: youtube的播放進度條 03/27 15:35
lalaboom: 謝謝Leo大,目前正是採取這種做法,但也因為muti thread 03/29 02:06
lalaboom: 產生的問題需要把兩端lock起來,所以效率有些降低 03/29 02:06