1. 程式人生 > >多執行緒之使用者級執行緒切換隨筆

多執行緒之使用者級執行緒切換隨筆

執行緒及切換

執行緒:比程序更輕的動態執行序列,同一程序中的多個執行緒可以共享資源(記憶體),故執行緒間的切換相比程序更加快速、方便。

執行緒的切換:是指令之間的切換,從一段執行序列(程式)切換到另一段執行序列(程式),而記憶體對映表不變;即PC的切換,執行緒的切換也是程序切換的重要組成部分

程序及切換

程序的切換包括:指令的切換和記憶體(對映表)的切換(資源的切換)

執行緒切換舉例

使用者開啟某個網站瀏覽網頁,網頁內容有文字、圖片。整個過程通過以下三個執行緒操作實現:

ThreadA:負責從伺服器下載資料到本機緩衝區

ThreadB:負責從緩衝區讀取文字,並顯示到螢幕

ThreadC:負責從緩衝區讀取圖片、解析、並顯示到螢幕

3個執行緒可以通過下述切換進行推進

ThreadA下載文字資料到緩衝區—(切換到ThreadB)—>ThreadB從緩衝區讀取文字、並顯示到螢幕—(切換到ThreadA)—>ThreadA下載圖片到緩衝區—(切換到ThreadC)—>ThreadC從緩衝區讀取圖片、解析、並顯示到螢幕

虛擬碼如下:

void WebExplorer(){
	char URL[]="http:cms.hit.edu.cn";   //瀏覽器網址
	char buffer[1000];   //緩衝區
	ThreadA_create(...,GetData,URL,buffer);  //建立執行緒A,用於將資料從伺服器下載至本機快取
	ThreadB_create(...,show,buffer);	//建立執行緒B,用於從緩衝區讀取資料,將資料顯示到螢幕
}

void GetData(char *URL,char *p){...};   //從伺服器下載資料至本機快取
void Show(char *p){...};   //資料顯示至螢幕

其中,Create函式實現建立執行緒,Yield函式實現執行緒的切換