linux查看線程阻塞原因:pthread_join一般主線程來調用,用來等待子線程退出,因為是等待,所以是阻塞的,一般主線程會依次join所有它創(chuàng)建的子線程。

創(chuàng)新互聯專注于企業(yè)成都全網營銷推廣、網站重做改版、溫宿網站定制設計、自適應品牌網站建設、H5網站設計、成都商城網站開發(fā)、集團公司官網建設、成都外貿網站建設公司、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為溫宿等各大城市提供網站開發(fā)制作服務。
1)執(zhí)行top命令,或使用-H選項(顯示所有線程),找到相關的高CPU的PID。
2)生成thread dump 快照(kill -3 PID)。
3)將top命令輸出PID轉換為HEX格式(16進制)。
4)在thread dump data中搜索nid=Hex PID。
5)分析受影響的thread和stack trace,精確定位代碼。
特點:
Linux,全稱GNU/Linux,是一套免費使用和自由傳播的類Unix操作系統(tǒng),是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng)。伴隨著互聯網的發(fā)展,Linux得到了來自全世界軟件愛好者、組織、公司的支持。
它除了在服務器方面保持著強勁的發(fā)展勢頭以外,在個人電腦、嵌入式系統(tǒng)上都有著長足的進步。使用者不僅可以直觀地獲取該操作系統(tǒng)的實現機制,而且可以根據自身的需要來修改完善Linux,使其最大化地適應用戶的需要。
Linux不僅系統(tǒng)性能穩(wěn)定,而且是開源軟件。其核心防火墻組件性能高效、配置簡單,保證了系統(tǒng)的安全。在很多企業(yè)網絡中,為了追求速度和安全,Linux不僅僅是被網絡運維人員當作服務器使用,甚至當作網絡防火墻,這是Linux的一大亮點。
Linux具有開放源碼、沒有版權、技術社區(qū)用戶多等特點,開放源碼使得用戶可以自由裁剪,靈活性高,功能強大,成本低。尤其系統(tǒng)中內嵌網絡協(xié)議棧,經過適當的配置就可實現路由器的功能。這些特點使得Linux成為開發(fā)路由交換設備的理想開發(fā)平臺。
1、啟動后臺子任務,在執(zhí)行命令后加操作符,表示將命令放在子shell中異步執(zhí)行。可以達到多線程效果。如下,sleep10#等待10秒,再繼續(xù)下一操作sleep10當前shell不等待,后臺子shell等待。
2、wait命令wait是用來阻塞當前進程的執(zhí)行,直至指定的子進程執(zhí)行結束后,才繼續(xù)執(zhí)行。使用wait可以在bash腳本“多進程”執(zhí)行模式下,起到一些特殊控制的作用。
pthread_join一般是主線程來調用,用來等待子線程退出,因為是等待,所以是阻塞的,一般主線程會依次join所有它創(chuàng)建的子線程。
pthread_exit一般是子線程調用,用來結束當前線程。
子線程可以通過pthread_exit傳遞一個返回值,而主線程通過pthread_join獲得該返回值,從而判斷該子線程的退出是正常還是異常。
阻塞操作是指在執(zhí)行設備操作時,若不能獲得資源,則掛起進程直到滿足可操作的條件后再進行操作。被掛起的進程進入睡眠狀態(tài),被從調度器的運行隊列移走,直到等待的條件被滿足。而非阻塞操作的進程在不能進行設備操作時,并不掛起,它要么放棄,要么不停地查詢,直至可以進行操作為止。
驅動程序通常需要提供這樣的能力:當應用程序進行read()、write()等系統(tǒng)調用時,若設備的資源不能獲取,而用戶又希望以阻塞的方式訪問設備,驅動程序應在設備驅動的xxx_read()、xxx_write()等操作中將進程阻塞直到資源可以獲取,此后,應用程序的read()、write()等調用才返回,整個過程仍然進行了正確的設備訪問,用戶并沒有感知到;若用戶以非阻塞的方式訪問設備文件,則當設備資源不可獲取時,設備驅動的xxx_read()、xxx_write()等操作應立即返回,read()、write()等系統(tǒng)調用也隨即被返回,應用程序收到-EAGAIN返回值。
在阻塞訪問時,不能獲取資源的進程將進入休眠,它將CPU資源“禮讓”給其他進程。因為阻塞的進程會進入休眠狀態(tài),所以必須確保有一個地方能夠喚醒休眠的進程,否則,進程就真的“壽終正寢”了。喚醒進程的地方最大可能發(fā)生在中斷里面,因為在硬件資源獲得的同時往往伴隨著一個中
斷。而非阻塞的進程則不斷嘗試,直到可以進行I/O。
所謂阻塞,即當內核發(fā)現請求條件不滿足時(可能需要產生IO)將調用進程掛起,讓出CPU給需要的進程執(zhí)行,提高效率,調用者進程被阻塞至條件滿足時再被喚醒。
我們來深入跟蹤read/write系統(tǒng)調用,因為Linux內核中對文件的讀寫采用了緩存,文件數據按照頁面(默認大小為4096字節(jié))為單位緩存在內存中,對于read系統(tǒng)調用,內核會根據應用程序發(fā)出的讀偏移在緩存中查找所讀位置對應的緩存頁面是否存在,如果存在,那么萬事大吉,只需將數據從緩存頁面copy至用戶緩沖區(qū)即可,但如果此頁面尚未被緩存,那么沒有別的辦法,只能從磁盤上讀出該頁面數據并緩存在內存中,所謂的讀過程,其實文件系統(tǒng)所需做的只是鎖定頁面,然后構造一個讀請求,并將請求發(fā)送給底層的IO子系統(tǒng)即可。文件系統(tǒng)發(fā)送完請求并不代表該頁面已經從磁盤中讀出,如果此時read系統(tǒng)調用返回,那就意味著該調用是非阻塞,不等IO完成即返回至調用者,但閱讀內核代碼發(fā)現,文件系統(tǒng)在發(fā)送完IO請求后并不立即返回,而是在接下來的流程中去嘗試鎖定該讀頁面,因為在前面文件系統(tǒng)發(fā)IO請求時頁面已經被鎖定,因此,如果頁面尚未被讀出的話,此時鎖定的話必然會阻塞,至此,我們就清楚了Linux內核中的read系統(tǒng)調用默認實現是阻塞方式。
網頁題目:Linux阻塞命令嗎,linux串口阻塞和非阻塞
文章位置:http://chinadenli.net/article7/dsghcoj.html
成都網站建設公司_創(chuàng)新互聯,為您提供自適應網站、外貿網站建設、定制開發(fā)、網站設計、網站營銷、響應式網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯