進程和線程的詳細解讀

進程和線程

背景:當我們執行一段代碼,運行一個程序的時候,這個程序所需要的資源必須到位(顯卡,GPS之類的),我們將除了CPU之外的PC資源統稱爲程序的上下文。

一個電腦中會有多個任務同時執行,每個任務的時間片(CPU的分配時間)是定義好的,當任務的時間片用完之後,就會被切換出去,等待下一次CPU的到來。(所以說電腦中的任務看似是同時執行的,其實是CPU切換的速度很快—這是對於單核處理器而言)

程序的執行過程CPU加載程序A的上下文—然後執行程序A—時間片用完—CPU保存程序A的上下文—切換到B…

進程:資源擁有的基本單位

通俗的來說進程就是一段程序的執行過程(CPU加載上下文+CPU執行+CPU保存上下文,這段時間)進程是一個“執行中的程序”。程序是一個沒有生命的實體,只有處理器賦予程序生命時(操作系統執行之),它才能成爲一個活動的實體,我們稱其爲進程。

爲什麼引入線程

沒有引入線程之前進程作爲能擁有資源和獨立運行的基本單位。它擁有獨立的堆棧空間和數據段,所以每當啓動一個新的進程必須分配給它獨立的地址空間,建立衆多的數據表來維護它的代碼段、堆棧段和數據段,這對於多進程來說十分“奢侈”,系統開銷比較大(多進程的時候,每當你切換下一個進程時,都要加載和保存上下文環境,這樣會浪費時間,爲了提高CPU資源的利用率引入線程)。所以在進程中引入線程,進程只是作爲資源的分配和調度的基本單位,而線程作爲CPU調度和分配的基本單位。

線程:CPU調度和分配的基本(最小)單位。

它可以與同一進程的其他線程共享進程的上下文環境,彼此之間使用相同的地址空間。線程之間的切換開銷就會變得很小(無需加載和保存上下文環境,開闢新的地址空間),當一個進程中有多個線程的時候,多任務的處理會比沒有引入線程之前快。

併發是把CPU運行時間劃分成若干個時間段,每個時間段再分配給各個線程執行,當一個線程在運行時,其它線程處於掛起狀。(多線程併發只是表面和感覺上的併發,並不是實質上的併發。一個線程要運行,它必須佔有CPU,而我們目前用的計算機大多都是單CPU的,所以一次最多只能有一個線程獲取CPU並運行。)從宏觀角度是同時進行的,但從微觀角度並不是同時進行。

多線程的好處

  1. 在多個cpu核心下,多線程的好處是顯而易見的,不然多個cpu核心只跑一個線程其他的核心就都浪費了;
  2. 即便不考慮多核心,在單核下,多線程也是有意義的,因爲在一些操作,比如IO操作阻塞的時候,是不需要cpu參與的,這時候cpu就可以另開一個線程去做別的事情,等待IO操作完成再回到之前的線程繼續執行即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章