線程與進程

線程與進程

簡單來講,進程就是CPU資源分配的最小單位,而線程則是CPU調(diào)度的最小單位。
要介紹進程與線程的話,需要先講解下并行處理

什么是并行處理

計算機中的并行處理就是同一時刻處理多個任務(wù),比如我們要計算下面這三個表達式的值,并顯示出結(jié)果。

A = 1+2
B = 20/5
C = 7*8

在編寫代碼的時候,我們可以把這個過程拆分為四個任務(wù):
任務(wù) 1 是計算 A=1+2;
任務(wù) 2 是計算 B=20/5;
任務(wù) 3 是計算 C=7*8;
任務(wù) 4 是顯示最后計算的結(jié)果。

單線程處理:分四步按照順序分別執(zhí)行這四個任務(wù)
多線程處理:先使用三個線程同時執(zhí)行前三個任務(wù);再執(zhí)行第四個顯示任務(wù)。
單線程執(zhí)行需要四步,而使用多線程只需要兩步。

線程 VS 進程

進程:啟動一個程序的時候,操作系統(tǒng)會為該程序創(chuàng)建一塊內(nèi)存,用來存放代碼、運行中的數(shù)據(jù)和一個執(zhí)行任務(wù)的主線程,我們把這樣的一個運行環(huán)境叫進程。
線程:線程是依附于進程的,而進程中使用多線程并行處理能提升運算效率。

image.png

進程和線程之間的關(guān)系有以下 4 個特點:

  1. 進程中的任意一線程執(zhí)行出錯,都會導(dǎo)致整個進程的崩潰。很常見就是JavaScript出現(xiàn)的執(zhí)行線程出錯時會導(dǎo)致整個頁面進程的崩潰,而導(dǎo)致頁面白屏。
  2. 線程之間共享進程中的數(shù)據(jù)。一個線程使用某些共享內(nèi)存時,其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存。
  3. 當一個進程關(guān)閉之后,操作系統(tǒng)會回收進程所占用的內(nèi)存。
  4. 進程之間的內(nèi)容相互隔離。每個進程都只能訪問自己訪問的數(shù)據(jù),這可以有效的避免一個進程的崩潰而影響到其他的進程。如果進程之間有進行數(shù)據(jù)通信的需要,這時候就需要進程通信(IPC)機制了。

操作系統(tǒng)的設(shè)計,因此可以歸結(jié)為三點:
(1)以多進程形式,允許多個任務(wù)同時運行;
(2)以多線程形式,允許單個任務(wù)分成不同的部分運行;
(3)提供協(xié)調(diào)機制,一方面防止進程之間和線程之間產(chǎn)生沖突,另一方面允許進程之間和線程之間共享資源。

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

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

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