




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、5.1Module 5: Threads線程線程Overview 綜述綜述Benefits 益處益處User and Kernel Threads 用戶和內(nèi)核線程用戶和內(nèi)核線程Multithreading Models 多線程模型多線程模型Solaris 2 Threads Solaris 2線程線程Java Threads Java線程線程5.2線程的引入線程的引入作為并發(fā)執(zhí)行的進(jìn)程具有二個根本的屬性:進(jìn)程作為并發(fā)執(zhí)行的進(jìn)程具有二個根本的屬性:進(jìn)程既是一個擁有資源的獨立單位,它可獨立分配虛既是一個擁有資源的獨立單位,它可獨立分配虛地址空間、主存和其它,又是一個可獨立調(diào)度和地址空間、主存和其它
2、,又是一個可獨立調(diào)度和分派的根本單位。這二個根本屬性使進(jìn)程成為并分派的根本單位。這二個根本屬性使進(jìn)程成為并發(fā)執(zhí)行的根本單位。發(fā)執(zhí)行的根本單位。在一些在一些OSOS中,象大多數(shù)中,象大多數(shù)UNIXUNIX系統(tǒng)、系統(tǒng)、LinuxLinux等,進(jìn)程等,進(jìn)程同時具有這二個屬性。同時具有這二個屬性。5.3線程的引入線程的引入而另一些而另一些OSOS中,象中,象WindowsNTWindowsNT、SolarisSolaris、OSOS2 2、Mac OSMac OS等,這二個屬性由等,這二個屬性由OSOS獨立處置。獨立處置。為了區(qū)分二個屬性為了區(qū)分二個屬性 ,資源擁有單位稱為進(jìn)程,資源擁有單位稱為進(jìn)程,
3、調(diào)度的單位稱為線程、又稱輕進(jìn)程調(diào)度的單位稱為線程、又稱輕進(jìn)程light light weight processweight process。線程只擁有一點兒在運轉(zhuǎn)中必不可省的資源程線程只擁有一點兒在運轉(zhuǎn)中必不可省的資源程序計數(shù)器、一組存放器和棧,但它可與同屬一序計數(shù)器、一組存放器和棧,但它可與同屬一個進(jìn)程的其它線程共享進(jìn)程擁有的全部資源。個進(jìn)程的其它線程共享進(jìn)程擁有的全部資源。線程定義為進(jìn)程內(nèi)一個執(zhí)行單元或一個可調(diào)度實線程定義為進(jìn)程內(nèi)一個執(zhí)行單元或一個可調(diào)度實體。體。5.4線程的引入線程的引入進(jìn)程:資源分配單位存儲器、文件和進(jìn)程:資源分配單位存儲器、文件和CPU調(diào)度調(diào)度分派單位。分派單位。線
4、程:作為線程:作為CPU調(diào)度單位,而進(jìn)程只作為其他資源調(diào)度單位,而進(jìn)程只作為其他資源分配單位分配單位只擁有必不可少的資源,如:線程形狀、存放器上只擁有必不可少的資源,如:線程形狀、存放器上下文和棧下文和棧同樣具有就緒、阻塞和執(zhí)行三種根本形狀同樣具有就緒、阻塞和執(zhí)行三種根本形狀5.5Threads線程線程A thread (or lightweight process) is a basic unit of CPU utilization; it consists of: 線程輕型進(jìn)程是線程輕型進(jìn)程是CPU運用的一個根本單元,包括運用的一個根本單元,包括program counter 程序計數(shù)器
5、程序計數(shù)器register set 存放器集存放器集stack space 棧空間??臻gA thread shares with its peer threads its: 一個線程與它的對等線程共享:一個線程與它的對等線程共享:code section 代碼段代碼段data section 數(shù)據(jù)段數(shù)據(jù)段operating-system resources 操作系統(tǒng)資源操作系統(tǒng)資源 such as open files and signals 如翻開的文件和信號量如翻開的文件和信號量collectively known as a task. 總體作為一個義務(wù)總體作為一個義務(wù)A traditio
6、nal or heavyweight process is equal to a task with one thread 傳統(tǒng)的或重型進(jìn)程等價于只需一個線程的義務(wù)傳統(tǒng)的或重型進(jìn)程等價于只需一個線程的義務(wù)5.6線程的優(yōu)點:減小并發(fā)執(zhí)行的時間和空間開銷線程的優(yōu)點:減小并發(fā)執(zhí)行的時間和空間開銷線程的創(chuàng)建、退出和調(diào)度,因此允許在系統(tǒng)中線程的創(chuàng)建、退出和調(diào)度,因此允許在系統(tǒng)中建立更多的線程來提高并發(fā)程度。建立更多的線程來提高并發(fā)程度。線程的創(chuàng)建時間比進(jìn)程短;線程的創(chuàng)建時間比進(jìn)程短;線程的終止時間比進(jìn)程短;線程的終止時間比進(jìn)程短;同進(jìn)程內(nèi)的線程切換時間比進(jìn)程短;同進(jìn)程內(nèi)的線程切換時間比進(jìn)程短;由于同進(jìn)程
7、內(nèi)線程間共享內(nèi)存和文件資源,可直由于同進(jìn)程內(nèi)線程間共享內(nèi)存和文件資源,可直接進(jìn)展不經(jīng)過內(nèi)核的通訊;接進(jìn)展不經(jīng)過內(nèi)核的通訊;5.7Threads線程線程Many software packages that run on modern desktop PCs are multi-threaded.例如:一個字處置程序例如:一個字處置程序(如如word)能夠同時能夠同時有一個線程接納用戶輸入,另外一個線程有一個線程接納用戶輸入,另外一個線程顯示圖形,還有一個線程執(zhí)行拼寫檢查。顯示圖形,還有一個線程執(zhí)行拼寫檢查。又例如:一個運用程序要完成幾個類似的又例如:一個運用程序要完成幾個類似的義務(wù),那么可以創(chuàng)
8、建幾個線程來完成。比義務(wù),那么可以創(chuàng)建幾個線程來完成。比如一個如一個web server,可以為每個用戶的懇,可以為每個用戶的懇求創(chuàng)建一個效力線程。求創(chuàng)建一個效力線程。5.8進(jìn)程和線程的比較進(jìn)程和線程的比較地址空間和其他資源如翻開文件:進(jìn)程間相地址空間和其他資源如翻開文件:進(jìn)程間相互獨立,同一進(jìn)程的各線程間共享某進(jìn)程內(nèi)互獨立,同一進(jìn)程的各線程間共享某進(jìn)程內(nèi)的線程在其他進(jìn)程不可見的線程在其他進(jìn)程不可見通訊:進(jìn)程間通訊通訊:進(jìn)程間通訊IPC,線程間可以直接讀寫進(jìn),線程間可以直接讀寫進(jìn)程數(shù)據(jù)段如全局變量來進(jìn)展通訊需求進(jìn)程數(shù)據(jù)段如全局變量來進(jìn)展通訊需求進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性程同步
9、和互斥手段的輔助,以保證數(shù)據(jù)的一致性調(diào)度:線程上下文切換比進(jìn)程上下文切換要快得調(diào)度:線程上下文切換比進(jìn)程上下文切換要快得多;多;5.9線程與進(jìn)程的比較線程與進(jìn)程的比較調(diào)度:在傳統(tǒng)的操作系統(tǒng)中,擁有資源的根本單位和獨立調(diào)度:在傳統(tǒng)的操作系統(tǒng)中,擁有資源的根本單位和獨立調(diào)度、分派的根本單位都是進(jìn)程。調(diào)度、分派的根本單位都是進(jìn)程。并發(fā)性:在引入線程的操作系統(tǒng)中,不僅進(jìn)程之間可以并并發(fā)性:在引入線程的操作系統(tǒng)中,不僅進(jìn)程之間可以并發(fā)執(zhí)行,而且在一個進(jìn)程中的多個線程之間亦可并發(fā)執(zhí)行發(fā)執(zhí)行,而且在一個進(jìn)程中的多個線程之間亦可并發(fā)執(zhí)行,因此使操作系統(tǒng)具有更好的并發(fā)性,從而能更有效地運,因此使操作系統(tǒng)具有更好
10、的并發(fā)性,從而能更有效地運用系統(tǒng)資源和提高系統(tǒng)吞吐量。用系統(tǒng)資源和提高系統(tǒng)吞吐量。擁有資源:不論是傳統(tǒng)的操作系統(tǒng),還是設(shè)有線程的操作擁有資源:不論是傳統(tǒng)的操作系統(tǒng),還是設(shè)有線程的操作系統(tǒng),進(jìn)程都是擁有資源的一個獨立單位,它可以擁有本系統(tǒng),進(jìn)程都是擁有資源的一個獨立單位,它可以擁有本人的資源。人的資源。系統(tǒng)開銷:由于在創(chuàng)建或吊銷進(jìn)程時,系統(tǒng)都要為之分配系統(tǒng)開銷:由于在創(chuàng)建或吊銷進(jìn)程時,系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、或回收資源,如內(nèi)存空間、I/O設(shè)備等。因此,操作系統(tǒng)設(shè)備等。因此,操作系統(tǒng)所付出的開銷將明顯地大于在創(chuàng)建或吊銷線程時的開銷。所付出的開銷將明顯地大于在創(chuàng)建或吊銷線程時的開銷。
11、 5.10ThreadControlBlockUserStackUserStackKernelStackKernelStackUserAddressSpaceUserAddressSpaceProcessControlBlockProcessControlBlockThreadSingle-ThreadedProcess ModelMultithreadedProcess ModelThreadControlBlockUserStackKernelStackThreadThreadControlBlockUserStackKernelStackThread線程切換和進(jìn)程切換5.11Multip
12、le Threads within a Task一個義務(wù)中的多線程一個義務(wù)中的多線程5.12Single and Multithreaded Processes單個和多線程進(jìn)程單個和多線程進(jìn)程5.13Responsiveness 呼應(yīng):一個多線程的運用在執(zhí)行中,即使其中的某個線呼應(yīng):一個多線程的運用在執(zhí)行中,即使其中的某個線程阻塞,其他的線程還可繼續(xù)執(zhí)行,從而提高呼應(yīng)速度程阻塞,其他的線程還可繼續(xù)執(zhí)行,從而提高呼應(yīng)速度Resource Sharing 資源共享:同一進(jìn)程的多個線程共享該進(jìn)程的內(nèi)存等資資源共享:同一進(jìn)程的多個線程共享該進(jìn)程的內(nèi)存等資源源Economy經(jīng)濟(jì)性:創(chuàng)建和切換線程的開銷要
13、低于進(jìn)程。比如,經(jīng)濟(jì)性:創(chuàng)建和切換線程的開銷要低于進(jìn)程。比如,Solaris中進(jìn)程創(chuàng)建時間是線程創(chuàng)建的中進(jìn)程創(chuàng)建時間是線程創(chuàng)建的30倍,進(jìn)程切換時倍,進(jìn)程切換時間是線程切換的間是線程切換的5倍。倍。Utilization of MP Architectures MP體系構(gòu)造的運用:多線程更適用于多處置機(jī)構(gòu)造。體系構(gòu)造的運用:多線程更適用于多處置機(jī)構(gòu)造。Benefits益處益處5.14Threads線程線程(Cont.)In a multiple threaded task, while one server thread is blocked and waiting, a second thr
14、ead in the same task can run. 在一個多線程義務(wù)在一個多線程義務(wù)中,當(dāng)一個效力器線程被阻塞后,在同一個義務(wù)中的第中,當(dāng)一個效力器線程被阻塞后,在同一個義務(wù)中的第2個線程可運轉(zhuǎn)個線程可運轉(zhuǎn)Cooperation of multiple threads in same job confers higher throughout and improved performance. 同一作業(yè)中多線程協(xié)同導(dǎo)致高同一作業(yè)中多線程協(xié)同導(dǎo)致高吞吐量并改善性能吞吐量并改善性能Applications that require sharing a common buffer (i.e.
15、, producer-consumer) benefit from thread utilization. 運用程序需求共享一個公用運用程序需求共享一個公用的緩沖即消費者的緩沖即消費者-消費者,從線程運用中得利消費者,從線程運用中得利Kernel-supported threads內(nèi)核支持線程內(nèi)核支持線程 (Mach and OS/2). User-level threads; supported above the kernel, via a set of library calls at the user level (Project Andrew from CMU). 用戶級線程;在內(nèi)核
16、用戶級線程;在內(nèi)核之上,經(jīng)過用戶級的庫調(diào)用之上,經(jīng)過用戶級的庫調(diào)用(creation,scheduling,and management with no support from kernel)Hybrid approach implements both user-level and kernel-supported threads (Solaris 2). 混合處置實現(xiàn)用戶級和內(nèi)核支持線程混合處置實現(xiàn)用戶級和內(nèi)核支持線程5.15User Threads用戶線程用戶線程Thread Management Done by User-Level Threads Library由用戶級線程庫進(jìn)展管
17、理的線程由用戶級線程庫進(jìn)展管理的線程.線程庫為線程的線程庫為線程的創(chuàng)建、調(diào)度和管理提供支持,無需內(nèi)核支持。創(chuàng)建、調(diào)度和管理提供支持,無需內(nèi)核支持。Examples例子例子- POSIX Pthreads- Mach C-threads- Solaris threads5.16用戶級線程用戶級線程(user-level thread)用戶線程的維護(hù)由運用進(jìn)程完成;用戶線程的維護(hù)由運用進(jìn)程完成;內(nèi)核不了解用戶線程的存在;內(nèi)核不了解用戶線程的存在;用戶線程切換不需求內(nèi)核特權(quán);用戶線程切換不需求內(nèi)核特權(quán);用戶線程調(diào)度算法可針對運用優(yōu)化;用戶線程調(diào)度算法可針對運用優(yōu)化;不依賴于不依賴于OS中心,運用進(jìn)程
18、利用線程庫提供創(chuàng)建、同步、調(diào)中心,運用進(jìn)程利用線程庫提供創(chuàng)建、同步、調(diào)度和管理線程的函數(shù)來控制用戶線程。如:數(shù)據(jù)庫系統(tǒng)度和管理線程的函數(shù)來控制用戶線程。如:數(shù)據(jù)庫系統(tǒng)informix,圖形處置,圖形處置Aldus PageMaker。調(diào)度由運用軟件內(nèi)部。調(diào)度由運用軟件內(nèi)部進(jìn)展,通常采用非搶先式和更簡單的規(guī)那么,也無需用戶態(tài)進(jìn)展,通常采用非搶先式和更簡單的規(guī)那么,也無需用戶態(tài)/中中心態(tài)切換,所以速度特別快。心態(tài)切換,所以速度特別快。Drawbacks: 一個線程發(fā)起系統(tǒng)一個線程發(fā)起系統(tǒng)調(diào)用而阻塞,那么整個進(jìn)程在等待。時間片分配給進(jìn)程,多線調(diào)用而阻塞,那么整個進(jìn)程在等待。時間片分配給進(jìn)程,多線程那
19、么每個線程就慢。程那么每個線程就慢。5.17用戶線程的實現(xiàn)用戶線程的實現(xiàn)用戶級線程在用戶空間實現(xiàn)用戶級線程在用戶空間實現(xiàn), ,運轉(zhuǎn)在一個運轉(zhuǎn)在一個中間系統(tǒng)上面中間系統(tǒng)上面, ,有兩種方式的中間系統(tǒng)有兩種方式的中間系統(tǒng): : 1) 1)運轉(zhuǎn)時系統(tǒng)運轉(zhuǎn)時系統(tǒng): :是用于管理和控制線程是用于管理和控制線程的函數(shù)的函數(shù)( (過程過程) )的集合的集合. . 2) 2)內(nèi)核控制線程內(nèi)核控制線程(LWP),(LWP),每個用戶級線程每個用戶級線程利用利用LWPLWP與內(nèi)核通訊與內(nèi)核通訊, ,每一個每一個LWPLWP都要銜接都要銜接到一個內(nèi)核級線程上到一個內(nèi)核級線程上5.18Kernel Threads內(nèi)核
20、線程內(nèi)核線程Supported by the Kernel由內(nèi)核支持由內(nèi)核支持Examples例子例子- Windows 95/98/NT - Solaris- Digital UNIX5.19內(nèi)核維護(hù)進(jìn)程和線程的上下文信息;內(nèi)核維護(hù)進(jìn)程和線程的上下文信息;線程切換由內(nèi)核完成;線程切換由內(nèi)核完成;一個線程發(fā)起系統(tǒng)調(diào)用而阻塞,不會影響其他線一個線程發(fā)起系統(tǒng)調(diào)用而阻塞,不會影響其他線程的運轉(zhuǎn)。程的運轉(zhuǎn)。時間片分配給線程,所以多線程的進(jìn)程獲得更多時間片分配給線程,所以多線程的進(jìn)程獲得更多CPU時間。時間。依賴于依賴于OS中心,由內(nèi)核進(jìn)展創(chuàng)建和撤銷,用來執(zhí)行一中心,由內(nèi)核進(jìn)展創(chuàng)建和撤銷,用來執(zhí)行一個指
21、定的函數(shù)。個指定的函數(shù)。Windows NT和和OS/2支持內(nèi)核線程支持內(nèi)核線程內(nèi)核線程內(nèi)核線程(kernel-level thread)5.20系統(tǒng)在創(chuàng)建一個新進(jìn)程時系統(tǒng)在創(chuàng)建一個新進(jìn)程時,便為它分配一個便為它分配一個義務(wù)數(shù)據(jù)區(qū)義務(wù)數(shù)據(jù)區(qū),其中包括假設(shè)干個線程控制塊其中包括假設(shè)干個線程控制塊TCB空間空間.每創(chuàng)建一個線程時每創(chuàng)建一個線程時,為新線程分為新線程分配一個配一個TCB,將有關(guān)信息填入該將有關(guān)信息填入該TCB中中,并并分配必要的資源分配必要的資源.內(nèi)核支持線程的實現(xiàn)內(nèi)核支持線程的實現(xiàn)5.21用戶級線程和內(nèi)核支持線程用戶級線程和內(nèi)核支持線程1線程的調(diào)度與切換速度:內(nèi)核支持線程的調(diào)度和線
22、程的調(diào)度與切換速度:內(nèi)核支持線程的調(diào)度和切換與進(jìn)程的調(diào)度和切換非常類似。切換與進(jìn)程的調(diào)度和切換非常類似。 2系統(tǒng)功能調(diào)用:當(dāng)傳統(tǒng)的用戶進(jìn)程調(diào)用一個系統(tǒng)系統(tǒng)功能調(diào)用:當(dāng)傳統(tǒng)的用戶進(jìn)程調(diào)用一個系統(tǒng)功能調(diào)用時,要由用戶態(tài)進(jìn)入中心態(tài),用戶進(jìn)程將被功能調(diào)用時,要由用戶態(tài)進(jìn)入中心態(tài),用戶進(jìn)程將被阻塞。當(dāng)內(nèi)核完成系統(tǒng)調(diào)用而前往時,才將該進(jìn)程喚阻塞。當(dāng)內(nèi)核完成系統(tǒng)調(diào)用而前往時,才將該進(jìn)程喚醒,繼續(xù)執(zhí)行。而用戶級線程在切換時不須轉(zhuǎn)入中心醒,繼續(xù)執(zhí)行。而用戶級線程在切換時不須轉(zhuǎn)入中心態(tài)態(tài).用戶級線程是不能直接利用系統(tǒng)調(diào)用的用戶級線程是不能直接利用系統(tǒng)調(diào)用的. 3線程執(zhí)行時間線程執(zhí)行時間 :對于只設(shè)置了用戶級線程的
23、系統(tǒng):對于只設(shè)置了用戶級線程的系統(tǒng),調(diào)度是以進(jìn)程為單位進(jìn)展的。在采用輪轉(zhuǎn)調(diào)度算法,調(diào)度是以進(jìn)程為單位進(jìn)展的。在采用輪轉(zhuǎn)調(diào)度算法時,各個進(jìn)程輪番執(zhí)行一個時間片,這對諸進(jìn)程而言時,各個進(jìn)程輪番執(zhí)行一個時間片,這對諸進(jìn)程而言似乎是公平的。似乎是公平的。 5.22Multithreading ModelsMultithreading Models多線程模型多線程模型Many-to-One:多對一多對一(many user_level threads to one kernel thread,thread management is done in user space)多個用戶線程對應(yīng)一個內(nèi)核多個用戶
24、線程對應(yīng)一個內(nèi)核線程線程One-to-One:一對一一對一(each user thread maps to a kernel thread,it allows multiple threads to run in parallel on multiprocessors,but every user thread need a kernel thread.windows nt and os/2) 一個用戶線程對應(yīng)一個內(nèi)核線程一個用戶線程對應(yīng)一個內(nèi)核線程Many-to-Many:多對多多對多(Solaris,IRIX,Digital UNIX)5.23Many-to-OneMany-to-One
25、多對一多對一Many User-Level Threads Mapped to Single Kernel Thread.多個用戶級線程映像進(jìn)單個內(nèi)核線程多個用戶級線程映像進(jìn)單個內(nèi)核線程線程管理在用戶空間實現(xiàn)線程管理在用戶空間實現(xiàn)任一時辰只能有一個線程可以訪問內(nèi)核任一時辰只能有一個線程可以訪問內(nèi)核(并并發(fā)性低發(fā)性低)Used on Systems That Do Not Support Kernel Threads. 用于不支持內(nèi)核線程的系統(tǒng)中用于不支持內(nèi)核線程的系統(tǒng)中5.24Many-to-one Model多對一模型多對一模型5.25One-to-OneOne-to-One一對一一對一Ea
26、ch User-Level Thread Maps to a Kernel Each User-Level Thread Maps to a Kernel Thread.Thread.每個用戶級線程映像進(jìn)一個內(nèi)核線程每個用戶級線程映像進(jìn)一個內(nèi)核線程提供了更好的并發(fā)性提供了更好的并發(fā)性每創(chuàng)建一個用戶級線程需創(chuàng)建一個相應(yīng)的內(nèi)每創(chuàng)建一個用戶級線程需創(chuàng)建一個相應(yīng)的內(nèi)核線程核線程, ,帶來了額外開銷帶來了額外開銷, ,所以許多系統(tǒng)限制所以許多系統(tǒng)限制運用中的線程數(shù)目運用中的線程數(shù)目ExamplesExamples- Windows 95/98/NT- Windows 95/98/NT- OS/2- OS
27、/25.26One-to-one Model一對一模型一對一模型5.27Many-to-many Model多對多模型多對多模型5.28Many-to-many Model多對多模型多對多模型多對一模型的缺陷:不能實現(xiàn)真正多對一模型的缺陷:不能實現(xiàn)真正的并發(fā)的并發(fā)一對一模型的缺陷:需限制運用中一對一模型的缺陷:需限制運用中的線程數(shù)目的線程數(shù)目多對多模型:不限制運用的線程數(shù)多對多模型:不限制運用的線程數(shù)、多個線程可以并發(fā)、多個線程可以并發(fā)5.29線程舉例線程舉例SUN Solaris 2Solaris支持內(nèi)核線程支持內(nèi)核線程(Kernel threads)、輕權(quán)、輕權(quán)進(jìn)程進(jìn)程(Lightweig
28、ht Processes)和用戶級線程和用戶級線程(User Level Threads)。一個進(jìn)程可有大量用戶線程;大量用戶線程一個進(jìn)程可有大量用戶線程;大量用戶線程復(fù)用少量的輕權(quán)進(jìn)程,不同的輕權(quán)進(jìn)程分別復(fù)用少量的輕權(quán)進(jìn)程,不同的輕權(quán)進(jìn)程分別對應(yīng)不同的內(nèi)核線程。對應(yīng)不同的內(nèi)核線程。5.30Solaris 2 Threads Solaris 2線程線程5.31Threads Support in Solaris 2 Solaris 2支持的線程支持的線程Solaris 2 is a version of UNIX with support for threads at the kernel a
29、nd user levels, symmetric multiprocessing, and real-time scheduling. Solaris 2 是是UNIX的一個版本,支持內(nèi)核級和用戶級的一個版本,支持內(nèi)核級和用戶級線程,對稱多處置和實時調(diào)度線程,對稱多處置和實時調(diào)度LWP (lightweight processes)intermediate level between user-level threads and kernel-level threads. 輕權(quán)進(jìn)程輕權(quán)進(jìn)程:在用戶級線程和內(nèi)核級線程之間在用戶級線程和內(nèi)核級線程之間5.32Threads Support in
30、Solaris 2 Solaris 2支持的線程支持的線程Resource needs of thread types: 不同類型線程需求的資源不同類型線程需求的資源Kernel thread: small data structure and a stack; thread switching does not require changing memory access information relatively fast. 內(nèi)核線程:小數(shù)據(jù)構(gòu)造及棧;線內(nèi)核線程:小數(shù)據(jù)構(gòu)造及棧;線程切換相對快程切換相對快LWP: PCB with register data, accounting an
31、d memory information,; switching between LWPs is relatively slow. LWP:帶有存放器數(shù)據(jù)的帶有存放器數(shù)據(jù)的PCB,記賬和內(nèi)存信息;在,記賬和內(nèi)存信息;在LWP之間之間切換相對慢切換相對慢User-level thread: only need stack and program counter; no kernel involvement means fast switching. Kernel only sees the LWPs that support user-level threads. 用戶級線程用戶級線程:只需棧及
32、程序計數(shù)器;無內(nèi)核涉及所以切換快。內(nèi)核只關(guān)注:只需棧及程序計數(shù)器;無內(nèi)核涉及所以切換快。內(nèi)核只關(guān)注支持用戶級線程的支持用戶級線程的LWP5.33輕權(quán)進(jìn)程輕權(quán)進(jìn)程(Light Weight Process)它是內(nèi)核支持的線程。一個進(jìn)程可有一它是內(nèi)核支持的線程。一個進(jìn)程可有一個或多個輕權(quán)進(jìn)程,每個輕權(quán)進(jìn)程由一個或多個輕權(quán)進(jìn)程,每個輕權(quán)進(jìn)程由一個單獨的內(nèi)核線程來支持。個單獨的內(nèi)核線程來支持。LWP是內(nèi)核數(shù)據(jù)構(gòu)造,駐留在內(nèi)核空間。是內(nèi)核數(shù)據(jù)構(gòu)造,駐留在內(nèi)核空間。只需當(dāng)一個用戶線程與內(nèi)核通訊時才需只需當(dāng)一個用戶線程與內(nèi)核通訊時才需求求LWP的協(xié)助。的協(xié)助。5.34Solaris 2 Threads So
33、laris 2線程線程綁定綁定BindingBinding:一個用戶線程永久地銜:一個用戶線程永久地銜接到一個接到一個LWPLWP對于沒有綁定的對于沒有綁定的LWPLWP,那么由線程庫動態(tài)地,那么由線程庫動態(tài)地進(jìn)展調(diào)整:一個進(jìn)程對應(yīng)的進(jìn)展調(diào)整:一個進(jìn)程對應(yīng)的LWPLWP組成組成LWPLWP池池,線程庫動態(tài)調(diào)整池中的數(shù)目,以保證運,線程庫動態(tài)調(diào)整池中的數(shù)目,以保證運用的最正確性能:當(dāng)池中的用的最正確性能:當(dāng)池中的LWPLWP全部阻塞,全部阻塞,而進(jìn)程中還有線程可以運轉(zhuǎn),那么線程庫而進(jìn)程中還有線程可以運轉(zhuǎn),那么線程庫會為之創(chuàng)建另一個會為之創(chuàng)建另一個LWPLWP;而當(dāng)一個;而當(dāng)一個LWPLWP長時長
34、時間沒用老化,普通為間沒用老化,普通為5 5分鐘,那么線程分鐘,那么線程庫會刪除它。庫會刪除它。5.35Process 1PermanentlyBoundThreadsProcess 1KTKTKTKTKTKTCPU 1CPU 1LWPUTUTUTUTLWPLWPUnboundThreadsPool of LWPs forUnbound ThreadsKernalUTLWP用戶線程、輕權(quán)進(jìn)程和中心線程的關(guān)系用戶線程、輕權(quán)進(jìn)程和中心線程的關(guān)系5.36Solaris Process Solaris 線程線程5.37Timesliceor PreemptWakeupStopBlockingSyste
35、mCallWakeupDispatchRunnableRunningActiveStoppedContinueStopStopStopSleepDispatchStopWakeupContinuePreemptStoppedRunnableActiveSleeping用戶級線程輕權(quán)進(jìn)程Solaris用戶線程和輕權(quán)進(jìn)程用戶線程和輕權(quán)進(jìn)程5.38用戶級線程在運用系統(tǒng)調(diào)用時如文件用戶級線程在運用系統(tǒng)調(diào)用時如文件讀寫,需求讀寫,需求“綁定綁定(binding)在一個在一個LWP上。上。永久綁定:一個永久綁定:一個LWP固定被一個用戶級固定被一個用戶級線程占用,該線程占用,該LWP移到移到LWP池之外池
36、之外暫時綁定:從暫時綁定:從LWP池中暫時分配一個未池中暫時分配一個未被占用的被占用的LWP線程舉例線程舉例5.39在運用系統(tǒng)調(diào)用時,假設(shè)一切在運用系統(tǒng)調(diào)用時,假設(shè)一切LWP已被其已被其他用戶級線程所占用綁定,那么該線他用戶級線程所占用綁定,那么該線程阻塞直到有可用的程阻塞直到有可用的LWP例如例如6個用戶個用戶級線程,而級線程,而LWP池有池有4個個LWP假設(shè)假設(shè)LWP執(zhí)行系統(tǒng)調(diào)用時阻塞如執(zhí)行系統(tǒng)調(diào)用時阻塞如read()調(diào)用,那么當(dāng)前綁定在調(diào)用,那么當(dāng)前綁定在LWP上的用戶級上的用戶級線程也阻塞。線程也阻塞。線程舉例線程舉例5.40有關(guān)的有關(guān)的C庫函數(shù)庫函數(shù)/* 創(chuàng)建用戶級線程創(chuàng)建用戶級線程
37、*/ int thr_create(void *stack_base, size_t stack_size, void *(*start_routine)(void *), void *arg, long flags,thread_t *new_thread_id);其中其中flags包括:包括:THR_BOUND永久捆綁永久捆綁, THR_NEW_LWP創(chuàng)建新創(chuàng)建新LWP放入放入LWP池,池,假設(shè)兩者同時指定那么創(chuàng)建兩個新假設(shè)兩者同時指定那么創(chuàng)建兩個新LWP,一,一個永久捆綁而另一個放入個永久捆綁而另一個放入LWP池池5.41有關(guān)的有關(guān)的C庫函數(shù)庫函數(shù)/* 在當(dāng)前進(jìn)程中創(chuàng)建在當(dāng)前進(jìn)程中創(chuàng)建L
38、WP*/ int _lwp_create(ucontext_t *contextp, unsigned long flags, lwpid_t *new_lwp_id); /* 構(gòu)造構(gòu)造LWP上下文上下文*/ void _lwp_makecontext(ucontext_t *ucp, void (*start_routine)( void *), void *arg, void *private, caddr_t stack_base, size_t stack_size); /* 留意:沒有進(jìn)展留意:沒有進(jìn)展捆綁捆綁操作的系統(tǒng)調(diào)用操作的系統(tǒng)調(diào)用 */5.42就緒形狀就緒形狀(Ready):
39、進(jìn)程已獲得除處置機(jī)外的所需資源,等待執(zhí)行。:進(jìn)程已獲得除處置機(jī)外的所需資源,等待執(zhí)行。備用形狀備用形狀(Standby):特定處置器的執(zhí)行對象,系統(tǒng)中每個處置器上只:特定處置器的執(zhí)行對象,系統(tǒng)中每個處置器上只能有一個處于備用形狀的線程。能有一個處于備用形狀的線程。運轉(zhuǎn)形狀運轉(zhuǎn)形狀(Running):完成描畫表切換,線程進(jìn)入運轉(zhuǎn)形狀,直到內(nèi)核:完成描畫表切換,線程進(jìn)入運轉(zhuǎn)形狀,直到內(nèi)核搶先、時間片用完、線程終止或進(jìn)展等待形狀。搶先、時間片用完、線程終止或進(jìn)展等待形狀。等待形狀等待形狀(Waiting):線程等待對象句柄,以同步它的執(zhí)行。等待終了:線程等待對象句柄,以同步它的執(zhí)行。等待終了時,根據(jù)
40、優(yōu)先級進(jìn)入運轉(zhuǎn)、就緒形狀。時,根據(jù)優(yōu)先級進(jìn)入運轉(zhuǎn)、就緒形狀。轉(zhuǎn)換形狀轉(zhuǎn)換形狀(Transition):線程在預(yù)備執(zhí)行而其內(nèi)核堆棧處于外存時,線:線程在預(yù)備執(zhí)行而其內(nèi)核堆棧處于外存時,線程進(jìn)入轉(zhuǎn)換形狀;當(dāng)其內(nèi)核堆棧調(diào)回內(nèi)存,線程進(jìn)入就緒形狀。程進(jìn)入轉(zhuǎn)換形狀;當(dāng)其內(nèi)核堆棧調(diào)回內(nèi)存,線程進(jìn)入就緒形狀。終止形狀終止形狀(Terminated):線程執(zhí)行完就進(jìn)入終止形狀;如執(zhí)行體有一:線程執(zhí)行完就進(jìn)入終止形狀;如執(zhí)行體有一指向線程對象的指針,可將線程對象重新初始化,并再次運用。指向線程對象的指針,可將線程對象重新初始化,并再次運用。初始化形狀初始化形狀(Initialized):線程創(chuàng)建過程中的線程形狀
41、;:線程創(chuàng)建過程中的線程形狀;Windows NT的線程形狀的線程形狀5.43運行終止就緒等待描述表切換搶先或時間片結(jié)束等待對象句柄執(zhí)行完成初始化轉(zhuǎn)換備用選擇執(zhí)行搶先放入就緒隊列等待完成等待完成換出的內(nèi)核堆棧換入的內(nèi)核堆棧重新初始化創(chuàng)建和初始化線程對象Windows NT的線程形狀的線程形狀5.44Windows 2000線程形狀線程形狀5.45ResourceAvailableUnblock/ResumeResource AvailableUnblockResource Not AvailableBlock/SuspendTerminateSwitchPick toRunPreemptedT
42、ransitionWaitingTerminatedNot RunnableRunnableReadyStandbyRunningWindows NT的線程形狀的線程形狀5.46NTNT線程的有關(guān)線程的有關(guān)APIAPICreateThread()函數(shù)在調(diào)用進(jìn)程的地址空間上創(chuàng)建函數(shù)在調(diào)用進(jìn)程的地址空間上創(chuàng)建一個線程,以執(zhí)行指定的函數(shù);前往值為所創(chuàng)建線一個線程,以執(zhí)行指定的函數(shù);前往值為所創(chuàng)建線程的句柄。程的句柄。ExitThread()函數(shù)用于終了本線程。函數(shù)用于終了本線程。SuspendThread()函數(shù)用于掛起指定的線程。函數(shù)用于掛起指定的線程。ResumeThread()函數(shù)遞減指定線程
43、的掛起計數(shù),函數(shù)遞減指定線程的掛起計數(shù),掛起計數(shù)為掛起計數(shù)為0時,線程恢復(fù)執(zhí)行。時,線程恢復(fù)執(zhí)行。5.47Java Threads JavaJava Threads Java線程線程Java provides support at the language level for creation and management of threads.Java provides commands that allow the developer to creat and manipulate additional threads of control within the program. Java
44、 在言語級提供線程的創(chuàng)建和管理在言語級提供線程的創(chuàng)建和管理, Java 提供了相關(guān)的命令提供了相關(guān)的命令,使得開發(fā)人員可以在使得開發(fā)人員可以在程序中創(chuàng)建和支配線程程序中創(chuàng)建和支配線程5.48JavaJava線程線程Java不直接支持異步事件。例如,一個客戶端想不直接支持異步事件。例如,一個客戶端想與某個與某個server建立銜接,那么該客戶阻塞直到建建立銜接,那么該客戶阻塞直到建立銜接或超時,但由于立銜接或超時,但由于Java不直接支持異步事件不直接支持異步事件如超時,那么客戶只能不斷等待建立銜接。如超時,那么客戶只能不斷等待建立銜接。但假設(shè)該但假設(shè)該server不幸不幸down機(jī)了?機(jī)了?J
45、ava的處理方案:利用多線程。在上述情況下,的處理方案:利用多線程。在上述情況下,建立兩個線程,其一為銜接線程建立兩個線程,其一為銜接線程T1,另一個為超,另一個為超時線程時線程T2, T2創(chuàng)建之后就睡眠一段時間,如創(chuàng)建之后就睡眠一段時間,如60秒,然后會醒來,去檢查秒,然后會醒來,去檢查T1能否還在試圖建立銜能否還在試圖建立銜接,假設(shè)是,那么中止它。接,假設(shè)是,那么中止它。5.49Java Threads JavaJava Threads Java線程線程Java Threads有兩種創(chuàng)建方法:有兩種創(chuàng)建方法:擴(kuò)展擴(kuò)展Thread類,并重置它的類,并重置它的RUN方法方法定義一個類,實現(xiàn)定義
46、一個類,實現(xiàn)Runnable接口接口5.50Extending the Thread Class擴(kuò)展擴(kuò)展Thread類類class Worker1 extends Threadpublic void run() System.out.println(“I am a Worker Thread);Thread creation by extending the thread classIt is the start() method that actually creates the new thread,start():allocates memory and initializes a ne
47、w thread in the JVM;call the run()method 新線程是由新線程是由start() 方法創(chuàng)建的方法創(chuàng)建的, start() 方法為方法為JVM中的一個新線程分配內(nèi)存并初中的一個新線程分配內(nèi)存并初始化始化,然后調(diào)用然后調(diào)用run()方法方法5.51Creating the Thread創(chuàng)建線程創(chuàng)建線程public class Firstpublic static void main(String args) Worker runner = new Worker1();runner.start();System.out.println(“I am the main
48、 thread);新線程是由新線程是由start() 方法創(chuàng)建的方法創(chuàng)建的, start() 方法為方法為JVM中的一個新線程分配內(nèi)中的一個新線程分配內(nèi)存并初始化存并初始化,然后調(diào)用然后調(diào)用run()方法方法5.52Extending the Thread Class擴(kuò)展擴(kuò)展Thread類類上面程序運轉(zhuǎn)后,上面程序運轉(zhuǎn)后,JVM創(chuàng)建了兩個線創(chuàng)建了兩個線程:程:第一個是運轉(zhuǎn)第一個是運轉(zhuǎn)main()方法的線程方法的線程第二個是第二個是runner線程:是由線程:是由start()方方法創(chuàng)建的法創(chuàng)建的5.53The Runnable InterfaceThe Runnable Interface可運
49、轉(zhuǎn)接口可運轉(zhuǎn)接口public interface Runnablepublic abstract void run();Runnable接口提供了接口提供了run()方法,所以接方法,所以接下來要定義一個類實現(xiàn)下來要定義一個類實現(xiàn)Runnable接口的接口的話,必需定義一個話,必需定義一個run()方法方法5.54Implementing the Runnable Interface可運轉(zhuǎn)接口的實現(xiàn)可運轉(zhuǎn)接口的實現(xiàn)class Worker2 implements Runnable public void run() System.out.println(“I am a Worker Threa
50、d);類類Worker2實現(xiàn)了實現(xiàn)了Runnable接口,并定義了接口,并定義了run() 方法方法5.55Creating the Thread創(chuàng)建線程創(chuàng)建線程public class Secondpublic static void main(String args) Runnable runner = new Worker2();Thread thrd = new Thread(runner);thrd.start();System.out.println(“I am the main thread);/*創(chuàng)建了一個線程對象傳送給創(chuàng)建了一個線程對象傳送給Runnable對象,當(dāng)這個新的線程由對象,當(dāng)這個新的線程由start()方法創(chuàng)建后,新線程開場執(zhí)行方法創(chuàng)建后,新線程開場執(zhí)行Runnable對象的對象的run()方法方法*/5.56Java Thread ManagementJava線程的管理線程的管理suspend() suspends execution of the currently running th
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度黑龍江省高校教師資格證之高等教育法規(guī)綜合練習(xí)試卷A卷附答案
- 江蘇省2019年普通高考對口單招文化統(tǒng)考數(shù)學(xué)試卷(含答案)
- 江西水利職業(yè)學(xué)院2022單招綜合技能模擬試卷
- 百康年創(chuàng)意市集修訂版
- 面試與口語能力提升試題及答案
- 中醫(yī)康復(fù)理療師考試全攻略試題及答案
- 建筑用工協(xié)議:建筑用工協(xié)議(2025年版)
- 二零二五年度個人住宅租賃合同范本
- 2025年度電子商務(wù)平臺單方終止合同
- 二零二五年度專利侵權(quán)法律委托代理協(xié)議
- 從十四五規(guī)劃看數(shù)字化轉(zhuǎn)型課件
- 螺栓扭矩及預(yù)緊力表
- 水利工程中灌漿工程檢測與評價講義36
- 教學(xué)能力大賽獲獎之教學(xué)實施報告課件
- 部編版九年級語文下冊古詩文理解性默寫
- 績效評價師考試-隨機(jī)題庫
- DB32∕T 3674-2019 生態(tài)河湖狀況評價規(guī)范
- 融資擔(dān)保公司會計培訓(xùn)
- 南京被聯(lián)合國評為No.1世界文學(xué)之都課件
- 鋼鐵廠高爐改造施工方案(65頁)
- 《定期定額納稅申報表》
評論
0/150
提交評論