《線程的引入N》PPT課件.ppt_第1頁
《線程的引入N》PPT課件.ppt_第2頁
《線程的引入N》PPT課件.ppt_第3頁
《線程的引入N》PPT課件.ppt_第4頁
《線程的引入N》PPT課件.ppt_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、2.7 線程的引入,線程(thread)技術(shù)早在60年代就被提出,但真正應(yīng)用多線程到操作系統(tǒng)中去,是在80年代中期,solaris是這方面的佼佼者。傳統(tǒng)的Unix也支持線程的概念,但是在一個(gè)進(jìn)程(process)中只允許有一個(gè)線程,這樣多線程就意味著多進(jìn)程?,F(xiàn)在,多線程技術(shù)已經(jīng)被許多操作系統(tǒng)所支持,包括Windows/NT,當(dāng)然,也包括Linux。,Linux中的線程編程,Linux系統(tǒng)下的多線程遵循POSIX線程接口,稱為pthread。編寫Linux下的多線程程序,需要使用頭文件pthread.h,連接時(shí)需要使用庫libpthread.a。,簡單多線程程序,/* example.c*/#i

2、nclude #include void thread(void)int i;for(i=0;i3;i+)printf(This is a pthread.n); ,int main(void)pthread_t id;int i,ret;ret=pthread_create(,我們編譯此程序:gcc example1.c -lpthread -o example1運(yùn)行example1,我們得到如下結(jié)果:This is the main process.This is a pthread.This is the main process.This is the main process.Thi

3、s is a pthread.This is a pthread.,再次運(yùn)行,我們可能得到如下結(jié)果:This is a pthread.This is the main process.This is a pthread.This is the main process.This is a pthread.This is the main process.,進(jìn)程的兩個(gè)基本屬性,獨(dú)立的資源擁有者: 給每個(gè)進(jìn)程分配一虛擬地址空間, 分配文件,I/O設(shè)備等 獨(dú)立調(diào)度和分配的基本單位: 進(jìn)程是一個(gè)獨(dú)立調(diào)度和分配的基本單位 以上兩個(gè)屬性構(gòu)成進(jìn)程并發(fā)執(zhí)行的基礎(chǔ),要使程序并發(fā)執(zhí)行, 系統(tǒng)必須額外完成操作:

4、創(chuàng)建進(jìn)程、撤消進(jìn)程、進(jìn)程切換 由于進(jìn)程是資源擁有者, 上述操作的時(shí)間空間開銷大,限制并發(fā)度的提高。為了減少開銷提高并發(fā)度,將進(jìn)程的兩屬性分開處理, 設(shè)置只作為調(diào)度和分配的基本單位而不獨(dú)立擁有資源的線程, 資源的擁有者還是進(jìn)程。進(jìn)程可包含多個(gè)線程, 同屬一個(gè)進(jìn)程的各線程可以并發(fā)執(zhí)行, 共享進(jìn)程的全部資源。線程只擁有極少量運(yùn)行中必不可少的資源,可以輕裝運(yùn)行,減少了并發(fā)執(zhí)行的系統(tǒng)開銷, 提高了速度。,線程(有時(shí)稱輕量級進(jìn)程) : 是被系統(tǒng)獨(dú)立調(diào)度和分配的基本單位 只擁有極少量運(yùn)行中必不可少的資源: 程序計(jì)數(shù)器、一組寄存器和棧(執(zhí)行棧)。 同屬一個(gè)進(jìn)程的各線程之間可以并發(fā)執(zhí)行, 共享所 在進(jìn)程的代碼段

5、、數(shù)據(jù)段和系統(tǒng)資源 可以創(chuàng)建、撤消本進(jìn)程中的另一個(gè)線程 同樣有就緒、阻塞和執(zhí)行狀態(tài) 一個(gè)進(jìn)程可以有多個(gè)線程,引入線程的好處: 占用較少的系統(tǒng)資源, 線程的創(chuàng)建、撤銷和切換花費(fèi)的時(shí)空間開銷都小。 同一進(jìn)程內(nèi)的線程共享內(nèi)存和文件, 它們之間相互通信無須調(diào)用內(nèi)核, 效率高。 提高應(yīng)用程序的性能, 如: web頁面的多幅圖像被同時(shí)傳送。 使多處理機(jī)效率更高, 多個(gè)線程可以同時(shí)在不同的處理器上運(yùn)行, 如:矩陣乘法 改善程序的結(jié)構(gòu)。,例子:,Web服務(wù)器 文件服務(wù)進(jìn)程在一段時(shí)間內(nèi)需要處理多個(gè)用戶的請求, 因此有效的方法是: 為每一個(gè)請求創(chuàng)建一個(gè)線程。 在一個(gè)SMP機(jī)器上 多個(gè)線程可以同時(shí)在不同的處理器上運(yùn)

6、行。 一個(gè)應(yīng)用有幾個(gè)獨(dú)立部分,他們不需要順序執(zhí)行 每個(gè)部分可以以線程方式實(shí)現(xiàn), 當(dāng)一個(gè)線程因I/O阻塞時(shí), 可以切換到同一應(yīng)用的另一個(gè)線程。 一個(gè)線程顯示菜單并讀入用戶輸入; 另一個(gè)線程執(zhí)行用戶命令。,2.7.2 線程與進(jìn)程的比較,調(diào)度 并發(fā)性 擁有資源 系統(tǒng)開銷,線程與進(jìn)程的關(guān)系,1:1,每一執(zhí)行的線程 有自己的地址空間 和資源.,各種UNIX版本,M:1,進(jìn)程擁有自己的地址空間和動態(tài)資源.在該進(jìn)程中多個(gè)線程可被創(chuàng)建和執(zhí)行,共享這些資源.,Windows NT, Solaris, OS/2, OS/390, MACH,1. 互斥鎖(mutex) 當(dāng)線程需要訪問使用頻率比較高的共享數(shù)據(jù)和程序段

7、時(shí), 最好用互斥鎖實(shí)現(xiàn)互斥訪問; 互斥鎖有兩種狀態(tài)開鎖(unlock)和關(guān)鎖(lock)狀態(tài), 只能用兩條命令(原語)lock和unlock對互斥鎖進(jìn)行修改操作。 當(dāng)線程需要訪問共享段時(shí), 先對它的互斥鎖執(zhí)行 lock 命令, 若互斥鎖已處于關(guān)鎖狀態(tài)則本線程將被阻塞, 如果它處于開鎖狀態(tài)則將它關(guān)鎖后再訪問; 訪問結(jié)束后必須執(zhí)行 unlock命令打開互斥鎖同時(shí)喚醒等待該互斥鎖的線程。 系統(tǒng)提供了TRYLOCK命令僅對互斥鎖進(jìn)行測試。,2.7.3 線程間的同步與通信,2. 條件變量 單獨(dú)用互斥鎖實(shí)現(xiàn)互斥訪問,可能引起死鎖; 在創(chuàng)建一個(gè)互斥鎖時(shí)聯(lián)系一個(gè)條件變量。單純互斥鎖用于短期鎖定,條件變量則用于

8、線程的長期等待,實(shí)現(xiàn)線程之間的同步。,Lock mutex check data structures; while (resource busy) wait(mutex,condtion ); Mark resource as busy; Unlock mutex,Lock mutex Mark resource as free; Unlock mutex Wakeup(conditon ),3. 信號量機(jī)制 1) 私用信號量:實(shí)現(xiàn)同一進(jìn)程中各線程的同步。 2) 公用信號量:實(shí)現(xiàn)不同進(jìn)程之間或不同進(jìn)程中的各線程之間的同步。,2.7.4 線程控制,用戶級線程(User-Level Thread

9、s) 內(nèi)核支持線程(Kernel Supported Threads) 兩者結(jié)合的方法,1.用戶級線程(ULT),僅存在于用戶級中 由應(yīng)用程序通過線程庫完成所有線程的管理 內(nèi)核不知道線程的存在,線程切換不需要內(nèi)核特權(quán) 內(nèi)核管理含線程的進(jìn)程的活動,但不管理線程 當(dāng)用戶級線程調(diào)用系統(tǒng)調(diào)用時(shí),整個(gè)進(jìn)程阻塞 通過線程庫完成: 線程的創(chuàng)建、撤消和調(diào)度切換 在線程之間傳遞消息和數(shù)據(jù) 保護(hù)和恢復(fù)線程上下文 實(shí)例: 數(shù)據(jù)庫管理系統(tǒng)informix 是ULT,用戶級線程的優(yōu)點(diǎn)和缺點(diǎn):,優(yōu)點(diǎn): 線程切換不調(diào)用內(nèi)核 調(diào)度是應(yīng)用程序特定的:可以選擇最好的算法 ULT可運(yùn)行在任何操作系統(tǒng)上(只需要線程庫) 缺點(diǎn): 用戶

10、級線程調(diào)用系統(tǒng)調(diào)用時(shí), 內(nèi)核把它看為整個(gè)進(jìn)程的行為, 整個(gè)進(jìn)程(含所有線程)將被阻塞。 內(nèi)核只將處理器分配給進(jìn)程, 同一進(jìn)程中的兩個(gè)線程不能同時(shí)運(yùn)行于兩個(gè)處理器上。,2. 內(nèi)核支持線程(KST):,所有線程管理由內(nèi)核完成 內(nèi)核維護(hù)進(jìn)程和線程的上下文 線程之間的切換需要內(nèi)核支持 以線程為基礎(chǔ)進(jìn)行調(diào)度 例子:Windows NT,OS/2,內(nèi)核級線程的優(yōu)點(diǎn)和缺點(diǎn):,優(yōu)點(diǎn): 對多處理器, 內(nèi)核可以同時(shí)調(diào)度同一進(jìn)程的多個(gè)線程, 多個(gè)線程能同時(shí)運(yùn)行于多個(gè)處理器上。 阻塞是在線程一級完成的 內(nèi)核例程是多線程的 缺點(diǎn): 在同一進(jìn)程內(nèi)的線程切換要調(diào)用內(nèi)核, 導(dǎo)致速度下降。,2.7.5 Solaris 操作系統(tǒng)

11、中的線程,是用戶級線程與內(nèi)核級線程結(jié)合實(shí)現(xiàn)的 用戶級線程(ULT ) 線程庫: 可在應(yīng)用進(jìn)程中建立多個(gè)(ULT ) 每個(gè)ULT需要一個(gè)棧和程序計(jì)數(shù)器 不受調(diào)度程序的調(diào)度, 線程切換快 對內(nèi)核不可見, 提供應(yīng)用程序并行性接口 系統(tǒng)可擁有數(shù)千個(gè)ULT 內(nèi)核級線程(KLT ) : 設(shè)置了大量KLT 有一個(gè)小的數(shù)據(jù)結(jié)構(gòu)和棧, 速度快 它們完成內(nèi)核的所有工作 調(diào)度處理器的單位, 其結(jié)構(gòu)由內(nèi)核維護(hù),輕型進(jìn)程(LWP): Solaris在用戶級線程和內(nèi)核級線程之間, 還定義了一種輕型進(jìn)程 LWP(Light-Weight Process), 一個(gè)進(jìn)程中至少有一個(gè)LWP(它含有進(jìn)程控制塊),內(nèi)核級線程執(zhí)行時(shí), 若被阻塞, 則與之相連的LWP 將隨之阻塞, 進(jìn)而使連到 LWP 上的用戶級線程被阻塞。如果進(jìn)程中有多個(gè)LWP, 當(dāng)一個(gè)被阻塞時(shí)另一個(gè)仍可繼續(xù)執(zhí)行, 這樣就避免了整個(gè)進(jìn)程的阻塞, 即使全部 LWP 都被阻塞, 進(jìn)程中不訪問內(nèi)核的線程仍然能繼續(xù)執(zhí)行。,上機(jī)安排,實(shí)驗(yàn)要求 (8課時(shí)) 時(shí)間,第5,8,10周二12節(jié),周四34節(jié),第

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論