日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

作业、进程、线程

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 作业、进程、线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作業、進程、線程

標簽: web互聯網youtube創業myspace 6056人閱讀 評論(2) 收藏 舉報 分類: 操作系統(4)

目錄(?)[+]

1. 基本概念

線程,進程是什么?要理解兩者概念,須要先了解一下操作系統的一些相關概念。

任務調度:

大部分操作系統(如Windows、Linux)的任務調度是采用時間片輪轉的搶占式調度方式,也就是說一個任務執行一小段時間后強制暫停去執行下一個任務,每個任務輪流執行。任務執行的一小段時間叫做時間片,任務正在執行時的狀態叫運行狀態,任務執行一段時間后強制暫停去執行下一個任務,被暫停的任務就處于就緒狀態等待下一個屬于它的時間片的到來。這樣每個任務都能得到執行,由于CPU的執行效率非常高,時間片非常短,在各個任務之間快速地切換,給人的感覺就是多個任務在“同時進行”,這也就是我們所說的并發(別覺得并發有多高深,它的實現很復雜,但它的概念很簡單,就是一句話:多個任務同時執行)。多任務運行過程的示意圖如下:



操作系統中的任務調度



作業:用戶在一次解決或是一個事務處理過程中要求計算機系統所做的工作的集合,它包括用戶程序、所需要的數據集控制命令等。作業是由一系列有序的步驟組成的。作業的完成要經過作業提交、作業收容、作業執行和作業完成4個階段。在執行一個作業可能會運行多個不同的進程。

進程:程序在一個數據集上的一次運行過程。是操作系統資源分配的基本單位。

?????????? 在Windows下,進程又被細化為線程,也就是一個進程下有多個能獨立運行的更小的單位.? 進程還擁有一個私有的虛擬地址空間,該空間僅能被它所包含的線程訪問。

線程:是進程中的一個實體,是被操作系統獨立調度和執行的基本單位。一個進程包含一個或多個線程。

????????????? 線程只能歸屬于一個進程并且它只能訪問該進程所擁有的資源。當操作系統創建一個進程后,該進程會自動申請一個名為主線程或首要線程的線程。主線程將執行運行時宿主, 而運行時宿主會負責載入CLR。


簡單總結:

作業是向計算機提交任務的任務實體,

而進程是執行實體,是資源分配的基本單位,

線程是處理機調度的基本單位。

??

2. 進程

? ? ? ?我們都知道計算機的核心是CPU,它承擔了所有的計算任務;而操作系統是計算機的管理者,它負責任務的調度、資源的分配和管理,統領整個計算機硬件;應用程序側是具有某種功能的程序,程序是運行于操作系統之上的。

? ? ? ? ?

2.1 進程的概念主要有兩點:

??????? 第一,進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括文本區域(text region)、數據區域(data region)和堆棧(stack region)。文本區域存儲處理器執行的代碼;數據區域存儲變量和進程執行期間使用的動態分配的內存;堆棧區域存儲著活動過程調用的指令和本地變量。

?????? 第二,進程是一個“執行中的程序”。程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成為一個活動的實體,我們稱其為進程。

進程是一個具有一定獨立功能的程序在一個數據集上的一次動態執行的過程,是操作系統進行資源分配和調度的一個獨立單位,是應用程序運行的載體。

2.2 進程特征  

??????? 動態性:進程的實質是程序在多道程序系統中的一次執行過程,進程是動態產生,動態消亡的。

  并發性:任何進程都可以同其他進程一起并發執行

  獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位;

  異步性:由于進程間的相互制約,使進程具有執行的間斷性,即進程按各自獨立的、不可預知的速度向前推進

  結構特征:進程由程序、數據和進程控制塊三部分組成。

  多個不同的進程可以包含相同的程序:一個程序在不同的數據集里就構成不同的進程,能得到不同的結果;但是執行過程中,程序不能發生改變。

2.3 進程和作業的區別

1、作業是用戶向計算機提交任務的任務實體。在用戶向計算機提交作業后,系統將它放入外存中的作業等待隊列中等待執行。而進程則是完成用戶任務的執行實體,是向系統申請分配資源的基本單位。任一進程,只要它被創建,總有相應的部分存在于內存中。
2、一個作業可由多個進程組成,且必須至少由一個進程組成,反過來則不成立。
3、作業的概念主要用在
批處理系統中,像UNIX這樣的分時系統中就沒有作業的概念。而進程的概念則用在幾乎所有的多道程序系統中

2.4 進程和程序的區別

1、程序是靜態概念,本身可以作為一種軟件資源保存;而進程是程序的一次執行過程,是動態概念,它有一定的生命期,是動態地產生和消亡的。

2、進程是一個能獨立運行的單位,能與其他進程并發執行,進程是作為資源申請和調度單位存在的;而通常的程序段不能作為一個獨立運行的單位。

3、程序和進程無一一對應關系。一方面一個程序可由多個進程共用;另一方面,一個進程在活動中又可順序地執行若干個程序。?

2.3 進程的狀態

????? 進程執行時的間斷性,決定了進程可能具有多種狀態。事實上,運行中的進程可能具有以下三種基本狀態。

  1)就緒狀態(Ready):

  進程已獲得除處理器外的所需資源,等待分配處理器資源;只要分配了處理器進程就可執行。就緒進程可以按多個優先級來劃分隊列。例如,當一個進程由于時間片用完而進入就緒狀態時,排入低優先級隊列;當進程由I/O操作完成而進入就緒狀態時,排入高優先級隊列。

  2)運行狀態(Running):

  進程占用處理器資源;處于此狀態的進程的數目小于等于處理器的數目。在沒有其他進程可以執行時(如所有進程都在阻塞狀態),通常會自動執行系統的空閑進程。

  3)阻塞狀態(Blocked):

  由于進程等待某種條件(如I/O操作或進程同步),在條件滿足之前無法繼續執行。該事件發生前即使把處理機分配給該進程,也無法運行。

?????????????

??

???????????????????????????????????? 進程狀態的轉換

進程狀態五態模型: 運行狀態(Running)當一個進程正在處理機上運行時。 就緒狀態(Ready)一個進程獲得了除處理機之外的一切所需資源,一旦得到處理機即可運行. 等待狀態又稱阻塞狀態(Blocked)一個進程正在等待某一事件而暫停運行時。如等待某資源,等待輸入/輸出完成。 創建狀態(NEW)一個進程正在被創建,還沒被轉到就緒狀態之前的狀態。 結束狀態(Exit)一個進程正在從系統中消失時的狀態,這是因為進程結束或由于其他原因所導致。

?

?????????????????????????????????????????????????

??????????????????????????????????????????????????????? 狀態變化圖

?

2.5 Windows 和linux進程

????? 進程創建:WINDOWS:WIN32接口,函數CreateProcess。LINUX:FORK函數,父子進程的區別PPID和PID。

???????LINUX中的進程的含義和WINDOWS中是不一樣的。LINUX中的進程本身是可以執行的。而WINDOWS中,進程只是表示一個資源的擁有體,是不能執行的。要執行的話,一定需要一個線程。這也部分解釋了為什么CreateProcess中為啥一定要傳入要執行的文件的名字。LINUX子進程直接使用父親的地址空間,只有子進程加載一個新的可執行文件的時候才創建自己的地址空間。也就是很多時候共享地址空間,有個函數(忘了)就是如果決定開始寫入,則將資源拷貝一份;如果此時突然決定不需要寫入,此時就能避免系統資源的消耗。

????? 進程相對于WINDOWS中的線程,所以同WINDOWS中的線程創建相比,二者的開銷應該差不多。

????? 執行:LINUX:exec, WNDOWS:WIN32函數CreateProcess。

????? 底層:兩者大部分都是C和匯編,在我們看來以為LINUX全是C,WINDOWS是C++,其實不然操作硬件的是匯編和C。

??????使用了不少宏定義,簡化地址運算和程序結構,如定義一個空地址:0x000000表示NULL。

????? 內核

???????????? WINDOWS:相對穩定的API,就是向后兼容,我們總是看到兼容的字眼。升級方便,過于臃腫。復雜的繼承關系,藏得結結實實的代碼。

???????????? LINUX:不固定的接口,為了更加的技術化,所以LINUX一直改進,很多時候偏離了桌面用戶。頭文件和執行文件也就是一些算法的改進和函數改進。如果你看完2.4的內核后,再看2.6的內核差異不大,但是不少。升級復雜,考慮的東西太多。數不盡的代碼,代碼是寶貴的,又是該死的。

???? 進程算法(優先級):

????????????? LINUX:圖形界面少點,內核支持搶占的同時又支持CFS公平調度算法。二叉樹、紅黑樹等算法。

????????????? WINDOWS:進程假死現象普遍,采用阻塞算法,很多時候導致不流暢、卡死。現在win7做了相當大的改進。算法不清楚,以前阻塞編程的不少。內存:基本上兩者差不多,在X86你懂得。

?

?????? WINDOS里的進程/線程是繼承自OS/2的。在WINDOS里,"進程"是指一個程序,而"線程"是一個"進程"里的一個執行"線索"。從核心上講, WINDOS的多進程與Linux并無多大的區別,在WINDOS里的線程才相當于Linux的進程,是一個實際正在執行的代碼。但是,WINDOS里同一個進程里各個線程之間是共享數據段的。這才是與Linux的進程最大的不同。


下面這段程序顯示了WINDOS下一個進程如何啟動一個線程。

int g;

DWORD WINAPI ChildProcess( LPVOID lpParameter ){

int i;

for ( i = 1; i <1000; i ++) {

g ++;

printf( "This is Child Thread: %d", g );

}

ExitThread( 0 );

};

void main()

{

int threadID;

int i;

g = 0;

CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID );

for ( i = 1; i <1000; i ++) {

g ++;

printf( "This is Parent Thread: %d", g );

}

}


在WINDOS下,使用CreateThread函數創建線程,與Linux下創建進程不同,WINDOS線程不是從創建處開始運行的,而是由 CreateThread指定一個函數,線程就從那個函數處開始運行。此程序同前面的UNIX程序一樣,由兩個線程各打印1000條信息。 threadID是子線程的線程號,另外,全局變量g是子線程與父線程共享的,這就是與Linux最大的不同之處。大家可以看出,WINDOS的進程/線程要比Linux復雜,在Linux要實現類似WINDOS的線程并不難,只要fork以后,讓子進程調用ThreadProc函數,并且為全局變量開設共享數據區就行了,但在WINDOS下就無法實現類似fork的功能了。所以現在WINDOS下的C語言編譯器所提供的庫函數雖然已經能兼容大多數Linux/UNIX的庫函數,但卻仍無法實現fork。


對于多任務系統,共享數據區是必要的,但也是一個容易引起混亂的問題,在WINDOS下,一個程序員很容易忘記線程之間的數據是共享的這一情況,一個線程修改過一個變量后,另一個線程卻又修改了它,結果引起程序出問題。但在Linux下,由于變量本來并不共享,而由程序員來顯式地指定要共享的數據,使程序變得更清晰與安全。


至于WINDOS的"進程"概念,其含義則是"應用程序",也就是相當于UNIX下的exec了。

?

?

2.6 進程通信

????? windows的進程間的通信方式有:

????? 1.文件映射;2. 共享內存(是文件映射的一種特殊情況);3.郵件槽(mailslot)(點對點消息隊列); 4.匿名管道;5;命名管道; 6. 剪貼板;7.動態數據交換;8.對象鏈接與嵌入;9.遠程過程調用;10.動態鏈接庫;11.socket;12.WM_COPYDATA .
???????linux進程間通信的方式有:1.管道 2.信號量 3.共享內存 4.消息隊列 5.套接字 6.信號
??????windows和linux共有的進程間通信方式:1. 消息(linux中叫做信號) 2. 共享內存? 3. 郵槽? 4. 管道?? 5.socket

Windows 進程

在運行于32位處理器上的32位Windows操作系統中,可將一個進程視為一段大小為4GB(232字節)的線性內存空間,它起始于0x00000000結束于0xFFFFFFFF。這段內存空間不能被其他進程所訪問,所以稱為該進程的私有空間。這段空間被平分為兩塊,2GB被系統所有,剩下2GB被用戶所有。

如果有N個進程運行在同一臺機器上,那么將需要N×4GB的海量RAM,還好事實并非如此。

  • Windows是按需為每個進程分配內存的,4GB是32位系統中一個進程所占空間的上限。
  • 將進程所需的內存劃分為4KB大小的內存頁,并根據使用情況將這些內存頁存儲在硬盤上或加載到RAM中,通過系統的這種虛擬內存機制,我們可以有效地減少對實際內存的需求量。當然這些對用戶和開發者來說都是透明的。

??????? 在32位Windows中,進程占據4GB的虛擬地址空間。與它們在MS-DOS和16位Windows操作系統中不同,32位Windows進程是沒有活力的。這就是說,一個32位Windows進程并不執行什么指令,它只是占據著4GB的地址空間,此空間中有應用程序EXE文件的代碼和數據

EXE需要的DLL也將它們的代碼的數據裝入到進程的地址空間除了地址空間,進程還占有某些資源,比如文件、動態內存分配和線程。當進程終止時,在它生命期中創建的各種資源將被清除。
如上所述,進程是沒有活力的,它只是一個靜態的概念

為了讓進程完成一些工作,進程必須至少占有一線程,所以線程是描述進程內的執行,正是線程負責執行包含在進程的地址空間中的代碼。

實際上,單個進程可能包含幾個線程,它們可以同時執行進程的地址空間中的代碼。
為了做到這一點,
每個線程有自己的一組CPU寄存器和椎。每個進程至少有一個線址程在執行其地址空間中的代碼,
如果沒有線程執行進程地空間中的代碼,進程也就沒有繼續存在的理由,系統將自動清除進程及其地址空間。
為了運行所有這些線程,操作系統為每個獨立線程安排一些CPU時間,操作系統以輪轉方式向線程提供時間片,這就給人一種假象,好象這些線程都在同時運行。
創建一個32位Windows進程時,它的第一個線程稱為主線程,由系統自動生成,然后可由這個主線程生成額外的線程,這些線程又可生成更多的線程。

?

?

3. 線程

3.1 線程的引入

在早期的操作系統中并沒有線程的概念,進程是能擁有資源和獨立運行的最小單位,也是程序執行的最小單位。任務調度采用的是時間片輪轉的搶占式調度方式,而進程是任務調度的最小單位,每個進程有各自獨立的一塊內存,使得各個進程之間內存地址相互隔離。

后來,隨著計算機的發展,對CPU的要求越來越高,進程之間的切換開銷較大,已經無法滿足越來越復雜的程序的要求了。于是就發明了線程,線程是程序執行中一個單一的順序控制流程,是程序執行流的最小單元,是處理器調度和分派的基本單位。一個進程可以有一個或多個線程,各個線程之間共享程序的內存空間(也就是所在進程的內存空間)。一個標準的線程由線程ID、當前指令指針(PC)、寄存器和堆棧組成。而進程由內存空間(代碼、數據、進程空間、打開的文件)和一個或多個線程組成。

?

引入線程總結:

? ? ?(1)創建進程。系統在創建進程時,必須為之分配其所必需的、除處理機以外的所有資源。如內存空間、I/O設備以及建立相應的PCB結構。

? ? ?(2)撤消進程。系統在撤消進程時,又必須先對這些資源進行回收操作,然后再撤消PCB結構。

? ? ?(3)進程切換。在對進程進行切換時,由于要保留當前進程的CPU環境和設置新選中進程的CPU環境,為此需花費不少處理機時間。

3.2 線程特征:

1、線程的執行狀態包括運行、就緒和等待。

2、進程中的所有線程共享所屬進程內的主存和其他資源。

3、擁有自己的線程控制塊和執行棧,寄存器。

3.3 線程屬性

多線程OS中,通常是在一個進程中包括多個線程,每個線程都是作為利用CPU的基本單位,是花費最小開銷的實體。線程具有以下屬性。

  1)輕型實體

  線程中的實體基本上不擁有系統資源,只是有一點必不可少的、能保證獨立運行的資源,比如,在每個線程中都應具有一個用于控制線程運行的線程控制塊TCB,用于指示被執行指令序列的程序計數器、保留局部變量、少數狀態參數和返回地址等的一組寄存器堆棧

  2)獨立調度和分派的基本單位。

  在多線程OS中,線程是能獨立運行的基本單位,因而也是獨立調度和分派的基本單位。由于線程很“輕”,故線程的切換非常迅速且開銷小。

  3)可并發執行。

  在一個進程中的多個線程之間,可以并發執行,甚至允許在一個進程中所有線程都能并發執行;同樣,不同進程中的線程也能并發執行。

  4)共享進程資源。

  在同一進程中的各個線程,都可以共享該進程所擁有的資源,這首先表現在:所有線程都具有相同的地址空間(進程的地址空間),這意味著,線程可以訪問該地址空間的每一個虛地址;此外,還可以訪問進程所擁有的已打開文件、定時器、信號量機構等。

?

3.4 進程和線程的區別:

???????線程和進程的區別在于,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文。多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定。線程的運行中需要使用計算機的內存資源和CPU。

  通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。由于線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間并發執行的程度,從而顯著提高系統資源的利用率和吞吐量。

  因而近年來推出的通用操作系統都引入了線程,以便進一步提高系統的并發性,并把它視為現代操作系統的一個重要指標。

①、在調度方面,線程是調度和指派的基本單位,而進程是資源擁有的基本單位。在同一進程中,線程的切換不會引起進程切換。在不同的進程中進行線程切換,如一個進程內的線程切換到另一個進程中的線程時,將會引起進程切換。?

②、在擁有資源方面,線程不擁有系統資源,但可以訪問其隸屬進程的系統資源,從而獲得系統資源。?進程間相互獨立,同一進程的各線程間共享。某進程內的線程在其它進程不可見。?

③、在并發性方面,在引入線程的操作系統中,不僅進程之間可以并發執行,而且同一進程內的多線程之間也可并發執行,從而使操作系統具有更好的并發性,大大提高系統的吞吐量。

④、調度切換的系統開銷方面,進程切換時的時空開銷很大,但線程切換時,只需保存和設置少量寄存器內容,因此開銷很小。

另外通信方面進程間通信IPC,而線程通信由于同一進程內的多個線程共享進程的相同地址空間,線程間可以直接讀寫進程數據段(如全局變量)來進行通信。因此,多線程之間的同步與通信非常容易實現,甚至無須操作系統內核的干預

在多線程OS中,進程不是一個可執行的實體

3.5 引入線程的好處:

??? (1) 易于調度。線程占用內存少,易于切換,可以輕裝運行。

?? 2) 提高并發性。由于線程占用內存少,在內存中一次容納的線程就多。這樣有利于提高程序的并發與并行程度。

?? (3) 開銷少。創建線程比創建進程開銷少。

?? 4) 利于充分發揮多處理器功能。在多處理器系統中,一個進程通過創建多個線程,讓每個線程在不同的處理器上運行,進一步提高并發性。

3.6 用戶級線程和內核支持線程較兩種線程的優缺點 :

1.線程的調度與切換速度:內核支持線程的調度和切換與進程的調度和切換十分相似。

?2.系統功能調用:當傳統的用戶進程調用一個系統功能調用時,要由用戶態進入核心態,用戶進程將被阻塞。當內核完成系統調用而返回時,才將該進程喚醒,繼續執行。 ?

3.線程執行時間對于只設置了用戶級線程的系統,調度是以進程為單位進行的。在采用輪轉調度算法時,各個進程輪流執行一個時間片,這對諸進程而言似乎是公平的。

?

3. 多線程與多核

參考來源:http://blog.csdn.net/luoweifu/article/details/46595285

操作系統的時間片輪轉的調度方式說一個任務執行一小段時間后強制暫停去執行下一個任務,每個任務輪流執行。很多操作系統的書都說“同一時間點只有一個任務在執行”。那有人可能就要問雙核處理器呢?難道兩個核不是同時運行嗎?


其實“同一時間點只有一個任務在執行”這句話是不準確的,至少它是不全面的。那多核處理器的情況下,線程是怎樣執行呢?這就需要了解內核線程。

多核(心)處理器是指在一個處理器上集成多個運算核心從而提高計算能力,也就是有多個真正并行計算的處理核心,每一個處理核心對應一個內核線程。內核線程(Kernel Thread, KLT)就是直接由操作系統內核支持的線程,這種線程由內核來完成線程切換,內核通過操作調度器對線程進行調度,并負責將線程的任務映射到各個處理器上。一般一個處理核心對應一個內核線程,比如單核處理器對應一個內核線程,雙核處理器對應兩個內核線程,四核處理器對應四個內核線程。


現在的電腦一般是雙核四線程、四核八線程,是采用超線程技術將一個物理處理核心模擬成兩個邏輯處理核心,對應兩個內核線程,所以在操作系統中看到的CPU數量是實際物理CPU數量的兩倍,如你的電腦是雙核四線程,打開“任務管理器\性能”可以看到4個CPU的監視器,四核八線程可以看到8個CPU的監視器。

圖 :雙核四線程在Windows8下查看的結果


超線程技術就是利用特殊的硬件指令,把一個物理芯片模擬成兩個邏輯處理核心,讓單個處理器都能使用線程級并行計算,進而兼容多線程操作系統和軟件,減少了CPU的閑置時間,提高的CPU的運行效率。這種超線程技術(如雙核四線程)由處理器硬件的決定,同時也需要操作系統的支持才能在計算機中表現出來。


程序一般不會直接去使用內核線程,而是去使用內核線程的一種高級接口——輕量級進程(Light Weight Process,LWP),輕量級進程就是我們通常意義上所講的線程(我們在這稱它為用戶線程),由于每個輕量級進程都由一個內核線程支持,因此只有先支持內核線程,才能有輕量級進程。用戶線程與內核線程的對應關系有三種模型:一對一模型、多對一模型、多對多模型,在這以4個內核線程、3個用戶線程為例對三種模型進行說明。


一對一模型

對于一對一模型來說,一個用戶線程就唯一地對應一個內核線程(反過來不一定成立,一個內核線程不一定有對應的用戶線程)。這樣,如果CPU沒有采用超線程技術(如四核四線程的計算機),一個用戶線程就唯一地映射到一個物理CPU的線程,線程之間的并發是真正的并發。一對一模型使用戶線程具有與內核線程一樣的優點,一個線程因某種原因阻塞時其他線程的執行不受影響;此處,一對一模型也可以讓多線程程序在多處理器的系統上有更好的表現。


但一對一模型也有兩個缺點:1.許多操作系統限制了內核線程的數量,因此一對一模型會使用戶線程的數量受到限制;2.許多操作系統內核線程調度時,上下文切換的開銷較大,導致用戶線程的執行效率下降。




圖 :一對一模型




多對一模型

?

多對一模型將多個用戶線程映射到一個內核線程上,線程之間的切換由用戶態的代碼來進行,因此相對一對一模型,多對一模型的線程切換速度要快許多;此外,多對一模型對用戶線程的數量幾乎無限制。但多對一模型也有兩個缺點:1.如果其中一個用戶線程阻塞,那么其它所有線程都將無法執行,因為此時內核線程也隨之阻塞了;2.在多處理器系統上,處理器數量的增加對多對一模型的線程性能不會有明顯的增加,因為所有的用戶線程都映射到一個處理器上了。


圖 :多對一模型



多對多模型


多對多模型結合了一對一模型和多對一模型的優點,將多個用戶線程映射到多個內核線程上。多對多模型的優點有:1.一個用戶線程的阻塞不會導致所有線程的阻塞,因為此時還有別的內核線程被調度來執行;2.多對多模型對用戶線程的數量沒有限制;3.在多處理器的操作系統中,多對多模型的線程也能得到一定的性能提升,但提升的幅度不如一對一模型的高。


在現在流行的操作系統中,大都采用多對多的模型。


圖 :多對多模型


總結

以上是生活随笔為你收集整理的作业、进程、线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。