多執行緒之使用者級執行緒切換隨筆
阿新 • • 發佈:2019-01-01
執行緒及切換
執行緒:比程序更輕的動態執行序列,同一程序中的多個執行緒可以共享資源(記憶體),故執行緒間的切換相比程序更加快速、方便。
執行緒的切換:是指令之間的切換,從一段執行序列(程式)切換到另一段執行序列(程式),而記憶體對映表不變;即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函式實現執行緒的切換