新聞中心
進(jìn)程的阻塞和掛起的區(qū)別?
進(jìn)程的掛起:系統(tǒng)在超過一定的時間沒有任何動作。

操作系統(tǒng)中掛起和阻塞的區(qū)別如下:
一:掛起是一種主動行為,因此恢復(fù)也應(yīng)該要主動完成,而阻塞則是一種被動行為,是在等待事件或資源時任務(wù)的表現(xiàn),你不知道他什么時候被阻塞(pend),也就不能確切 的知道他什么時候恢復(fù)阻塞。而且掛起隊列在操作系統(tǒng)里可以看成一個,而阻塞隊列則是不同的事件或資源(如信號量)就有自己的隊列;
二:阻塞(pend)就是任務(wù)釋放CPU,其他任務(wù)可以運行,一般在等待某種資源或信號量的時候出現(xiàn)。掛起(suspend)不釋放CPU,如果任務(wù)優(yōu)先級高就永遠(yuǎn)輪不到其他任務(wù)運行,一般掛起用于程序調(diào)試中的條件中斷,當(dāng)出現(xiàn)某個條件的情況下掛起,然后進(jìn)行單步調(diào)試;
三:pend是task主動去等一個事件,或消息.suspend是直接懸掛task,以后這個task和你沒任何關(guān)系,任何task間的通信或者同步都和這個suspended task沒任何關(guān)系了,除非你resume task;
四:任務(wù)調(diào)度是操作系統(tǒng)來實現(xiàn)的,任務(wù)調(diào)度時,直接忽略掛起狀態(tài)的任務(wù),但是會顧及處于pend下的任務(wù),當(dāng)pend下的任務(wù)等待的資源就緒后,就可以轉(zhuǎn)為ready了。ready只需要等待CPU時間,當(dāng)然,任務(wù)調(diào)度也占用開銷,但是不大,可以忽略??梢赃@樣理解,只要是掛起狀態(tài),操作系統(tǒng)就不在管理這個任務(wù)了;
五:掛起是主動的,一般需要用掛起函數(shù)進(jìn)行操作,若沒有resume的動作,則此任務(wù)一直不會ready。而阻塞是因為資源被其他任務(wù)搶占而處于休眠態(tài)。兩者的表現(xiàn)方式都是從就緒態(tài)里“清掉”,即對應(yīng)標(biāo)志位清零,只不過實現(xiàn)方式不一樣。
解決同時間1000個線程的線程池?
要解決同時間處理1000個線程的需求,可以采用線程池的方式。線程池有以下主要優(yōu)點:
1. 重用線程,減少線程創(chuàng)建和銷毀的開銷,提高性能。
2. 有限制的線程數(shù)量,避免大量線程使用過度資源, threatening system stability。
3. 提供管理和監(jiān)控機制,能夠觀察線程池的運行狀態(tài)并對其進(jìn)行調(diào)整。
實現(xiàn)線程池,主要有以下步驟:
1. 在創(chuàng)建線程池時指定線程數(shù)量,如100個工作線程。這100個線程可以重復(fù)使用,處理不同的任務(wù)。
2. 向線程池提交任務(wù),可以是Runnable對象或Callable對象。提交的任務(wù)會被放入任務(wù)隊列,等待線程執(zhí)行。
3. 空閑線程從任務(wù)隊列中獲取任務(wù)并執(zhí)行。如果當(dāng)前沒有可用線程,任務(wù)會等待,直到有線程變?yōu)榭臻e。
4. 可設(shè)置拒絕策略,如CallerRunsPolicy。當(dāng)任務(wù)過多時,該策略會直接在調(diào)用者線程中運行被拒絕的任務(wù)。
5. 關(guān)閉或銷毀線程池,在關(guān)閉時 freely interrupt 正在運行的線程。
到此,以上就是小編對于c++阻塞隊列的問題就介紹到這了,希望這2點解答對大家有用。
網(wǎng)站欄目:進(jìn)程的阻塞和掛起的區(qū)別?windowsc阻塞隊列
文章出自:http://www.5511xx.com/article/djcgehe.html


咨詢
建站咨詢
