文章均爲本人技術筆記,轉載請註明出處https://segmentfault.com/u/yzwall算法
進程
:程序的執行實體,操做系統分配資源的最小單位;segmentfault
線程
:被稱爲輕量級進程,是CPU調度分配的最小單位。一個標準的線程由線程ID,程序計數器(PC),寄存器集合和堆棧組成;安全
Linux進程間通訊:管道,信號(signal),消息隊列(Message),共享內存(shared memory),信號量(semaphore),套接口(socket)
Linux線程間通訊:互斥量(Mutex),信號量(Semaphore),條件變量多線程
Windows進程間通訊:管道(pipe),消息隊列(Message),共享內存(shared memory),信號量(semaphore),套接口(socket)
Windows線程間通訊:臨界區(critical section),互斥量(Mutex),信號量(Semaphore),事件(Event)socket
線程是獨立調度的基本單位,進程是擁有資源的基本單位(進程只做爲除CPU以外系統資源的分配單元,線程做爲CPU的分配單元);
在同一進程中,線程之間的切換不會引發進程的切換,但從一個進程中的線程切換到另外一個進程中的線程時,會引發進程的切換;spa
進程建立和撤銷時,系統開銷遠大於線程開銷;
進程切換時,保存現場開銷和上下文切換開銷遠大於線程開銷;操作系統
進程之間的地址空間互相獨立,一個進程崩潰不影響其餘進程;
線程之間(屬於同一進程)共享進程的地址空間,一個線程死掉至關於整個進程死掉;線程
進程間通訊須要藉助操做系統;
因爲線程共享進程的地址空間,所以線程間同步與通訊較容易實現,甚至無需操做系統干預;code
死鎖產生必須同時知足如下四個條件:接口
互斥條件:一段時間內,某資源僅被一個進程所佔有,其餘進程只能等待;
不剝奪條件:進程擁有的資源只能由本身釋放,不可被其餘進程強行奪走;
請求和保持條件:在申請資源不能所有知足的條件下,進程佔有已申請的資源,等待新的資源分配
循環等待條件:存在系統資源的進程循環等待鏈;
預防死鎖:任意破壞死鎖產生的四個必要條件之一便可;
避免死鎖:在資源動態分配過程當中,採用某種算法(好比銀行家算法)防止系統進入」不安全狀態「(系統有可能死鎖);
死鎖檢測和解除:經過系統檢測機制及時檢測出死鎖現象(利用資源分配圖),而後可經過剝奪資源,撤銷進程和回退進程解除死鎖;