處理調(diào)度與死鎖

  • 請(qǐng)談一談,系統(tǒng)如何提高并發(fā)性?

考察:操作系統(tǒng)綜合性
參考回答:

1、提高CPU并發(fā)計(jì)算能力

(1)多進(jìn)程&多線(xiàn)程

(2)減少進(jìn)程切換,使用線(xiàn)程,考慮進(jìn)程綁定CPU

(3)減少使用不必要的鎖,考慮無(wú)鎖編程

(4)考慮進(jìn)程優(yōu)先級(jí)

(5)關(guān)注系統(tǒng)負(fù)載

2、改進(jìn)I/O模型

(1)DMA技術(shù)

(2)異步I/O

(3)改進(jìn)多路I/O就緒通知策略,epoll

(4)Sendfile

(5)內(nèi)存映射

(6)直接I/O

  • 請(qǐng)你解釋一下,通常系統(tǒng)CPU比較高是什么原因?

考察點(diǎn):處理機(jī)
參考回答:

1、首先查看是哪些進(jìn)程的CPU占用率最高(如下可以看到詳細(xì)的路徑)

ps -aux --sort -pcpu | more

定位有問(wèn)題的線(xiàn)程可以用如下命令

ps -mp pid -o THREAD,tid,time | more

2、查看JAVA進(jìn)程的每個(gè)線(xiàn)程的CPU占用率

ps -Lp 5798 cu | more # 5798是查出來(lái)進(jìn)程PID

3、追蹤線(xiàn)程,查看負(fù)載過(guò)高的原因,使用JDK下的一個(gè)工具

jstack 5798 # 5798是PID

jstack -J-d64 -m 5798 # -j-d64指定64為系統(tǒng)

jstack 查出來(lái)的線(xiàn)程ID是16進(jìn)制,可以把輸出追加到文件,導(dǎo)出用記事本打開(kāi),再根據(jù)系統(tǒng)中的線(xiàn)程ID去搜索查看該ID的線(xiàn)程運(yùn)行內(nèi)容,可以和開(kāi)發(fā)一起排查。

  • 請(qǐng)談一談,什么情況下會(huì)發(fā)生死鎖?解決死鎖的策略有哪些?

考察點(diǎn):死鎖
參考回答:

(一)互斥條件:一個(gè)資源一次只能被一個(gè)進(jìn)程訪問(wèn)。即某個(gè)資源在一段時(shí)間內(nèi)只能由一個(gè)進(jìn)程占有,不能同時(shí)被兩個(gè)或兩個(gè)以上的進(jìn)程占 有。這種獨(dú)占資源如CD-ROM驅(qū)動(dòng)器,打印機(jī)等等,必須在占有該資源的進(jìn)程主動(dòng)釋放它之后,其它進(jìn)程才能占有該資源。這是由資源本身的屬性所決定的。

(二)請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。進(jìn)程至少已經(jīng)占有一個(gè)資源,但又申請(qǐng)新的資源;由于該資源已被另外進(jìn)程占有,此時(shí)該進(jìn)程阻塞;但是,它在等待新資源之時(shí),仍繼續(xù)占用已占有的資源。

(三)不剝奪條件:進(jìn)程已經(jīng)獲得的資源,在未使用完之前不能強(qiáng)行剝奪,而只能由該資源的占有者進(jìn)程自行釋放。

(四)循環(huán)等待條件:若干資源形成一種頭尾相接的循環(huán)等待資源關(guān)系。

解決方法:銀行家算法

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

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

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