- 進程(process)
進程好比工廠的車間泪漂,它代表 CPU 所能處理的單個任務(wù)腥泥。任一時刻,CPU 總是運行一個進程关斜,其他進程處于非運行狀態(tài)迫淹。
- 線程(thread)
一個車間里秘通,可以有很多工人,協(xié)同完成同一個任務(wù)敛熬,線程就好比車間里的工人肺稀。
一個進程可以包括多個線程。
- 共享內(nèi)存
車間的空間是工人們共享的应民,比如許多房間每個工人都可以進出话原。這象征一個進程的內(nèi)存空間是共享的炸茧,每個線程都可以使用這些共享內(nèi)存。
- 互斥鎖(Mutex)
可是稿静,每間房間的大小不同,有些房間最多只能容納一個人辕狰,比如廁所改备。里面有人的時候,其他人就不能進去了蔓倍。這代表一個線程使用某些共享內(nèi)存時悬钳,其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存偶翅。
一個防止他人進入的簡單方法默勾,就是門口加一把鎖。先到的人鎖上門聚谁,后到的人看到上鎖母剥,就在門口排隊,等鎖打開再進去形导。這就叫"互斥鎖"(Mutual exclusion环疼,縮寫 Mutex),防止多個線程同時讀寫某一塊內(nèi)存區(qū)域朵耕。
- 信號量(Semaphore)
還有些房間炫隶,可以同時容納n個人,比如廚房阎曹。也就是說伪阶,如果人數(shù)大于n,多出來的人只能在外面等著处嫌。這好比某些內(nèi)存區(qū)域栅贴,只能供給固定數(shù)目的線程使用。
這時的解決方法锰霜,就是在門口掛n把鑰匙筹误。進去的人就取一把鑰匙,出來時再把鑰匙掛回原處癣缅。后到的人發(fā)現(xiàn)鑰匙架空了厨剪,就知道必須在門口排隊等著了。這種做法叫做"信號量"(Semaphore)友存,用來保證多個線程不會互相沖突祷膳。
不難看出,mutex是semaphore的一種特殊情況(n=1時)屡立。也就是說直晨,完全可以用后者替代前者。但是,因為mutex較為簡單勇皇,且效率高罩句,所以在必須保證資源獨占的情況下,還是采用這種設(shè)計敛摘。
操作系統(tǒng)的設(shè)計门烂,因此可以歸結(jié)為三點:
(1)以多進程形式,允許多個任務(wù)同時運行兄淫;
(2)以多線程形式屯远,允許單個任務(wù)分成不同的部分運行;
(3)提供協(xié)調(diào)機制捕虽,一方面防止進程之間和線程之間產(chǎn)生沖突慨丐,另一方面允許進程之間和線程之間共享資源。
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html