linux 管道溢出問題分析

由于項目中的線程間通訊使用到libuv中的pipe,由于libuv的高性能異步結(jié)構(gòu),數(shù)據(jù)傳輸速度很快。為了方便數(shù)據(jù)解析試用了結(jié)構(gòu)體,比如:

typedef?struct?A{??

??a[1024*10];??

};??

可以看到一個數(shù)據(jù)包有10kb,在系統(tǒng)中查看系統(tǒng)管道大?。?/p>


pipe_buf 大小:512*8 = 4kb,那豈不是一個包就溢出了,然而還有一個pipe最大容量,man 7 pipe 查看:


最大容量是 65536 bytes = 64kb

接下來,如果pipe write線程的寫的比較快,或者pipe read線程由于某個處理耗時長,導(dǎo)致管道里有6個數(shù)據(jù)包沒有取出,再往里寫就會提示resource temporarilly unvailable,甚至出現(xiàn)段錯誤。

這個問題解決也容易,pipe wirte 速度 < pipe read速度即可,這樣就不會溢出了,pipe read 的優(yōu)化也很重要。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,872評論 11 349
  • Android跨進(jìn)程通信IPC整體內(nèi)容如下 1、Android跨進(jìn)程通信IPC之1——Linux基礎(chǔ)2、Andro...
    隔壁老李頭閱讀 16,064評論 19 113
  • 一、基礎(chǔ)知識:1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,575評論 0 4
  • 心中尚有未了的戰(zhàn)爭在咆哮, 蜂擁而入沖擊著沉重的頭顱, 造就我們 毀滅我們 留下傷痕, 大人做出的決定有時傷害人心...
    余憶桐閱讀 248評論 1 2
  • 不知道啥時候,開始養(yǎng)成了喜歡買書的習(xí)慣,也偶爾翻書的習(xí)慣。閑來無事,都喜歡不自覺的去翻翻。覺得反正覺得無聊,不如給...
    夢鹿是一只貓閱讀 406評論 0 2

友情鏈接更多精彩內(nèi)容