国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
線程的概念和多線程模型

from http://c.biancheng.net/cpp/html/2593.html


線程的基本概念


引入進(jìn)程的目的,是為了使多道程序并發(fā)執(zhí)行,以提高資源利用率和系統(tǒng)吞吐量;而引入線程,則是為了減小程序在并發(fā)執(zhí)行時(shí)所付出的時(shí)空開(kāi)銷(xiāo),提高操作系統(tǒng)的并發(fā)性能。

線程最直接的理解就是“輕量級(jí)進(jìn)程”,它是一個(gè)基本的CPU執(zhí)行單元,也是程序執(zhí)行流的最小單元,由線程ID、程序計(jì)數(shù)器、寄存器集合和堆棧組成。線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤銷(xiāo)另一個(gè)線程,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運(yùn)行中呈現(xiàn)出間斷性。線程也有就緒、阻塞和運(yùn)行三種基本狀態(tài)。

引入線程后,進(jìn)程的內(nèi)涵發(fā)生了改變,進(jìn)程只作為除CPU以外系統(tǒng)資源的分配單元,線程則作為處理機(jī)的分配單元。

線程與進(jìn)程的比較

1) 調(diào)度。在傳統(tǒng)的操作系統(tǒng)中,擁有資源和獨(dú)立調(diào)度的基本單位都是進(jìn)程。在引入線程的操作系統(tǒng)中,線程是獨(dú)立調(diào)度的基本單位,進(jìn)程是資源擁有的基本單位。在同一進(jìn)程中,線程的切換不會(huì)引起進(jìn)程切換。在不同進(jìn)程中進(jìn)行線程切換,如從一個(gè)進(jìn)程內(nèi)的線程切換到另一個(gè)進(jìn)程中的線程時(shí),會(huì)引起進(jìn)程切換。

2) 擁有資源。不論是傳統(tǒng)操作系統(tǒng)還是設(shè)有線程的操作系統(tǒng),進(jìn)程都是擁有資源的基本單位,而線程不擁有系統(tǒng)資源(也有一點(diǎn)必不可少的資源),但線程可以訪問(wèn)其隸屬進(jìn)程的系統(tǒng)資源。

3) 并發(fā)性。在引入線程的操作系統(tǒng)中,不僅進(jìn)程之間可以并發(fā)執(zhí)行,而且多個(gè)線程之間也可以并發(fā)執(zhí)行,從而使操作系統(tǒng)具有更好的并發(fā)性,提高了系統(tǒng)的吞吐量。

4) 系統(tǒng)開(kāi)銷(xiāo)。由于創(chuàng)建或撤銷(xiāo)進(jìn)程時(shí),系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、 I/O設(shè)備等,因此操作系統(tǒng)所付出的開(kāi)銷(xiāo)遠(yuǎn)大于創(chuàng)建或撤銷(xiāo)線程時(shí)的開(kāi)銷(xiāo)。類(lèi)似地,在進(jìn)行進(jìn)程切換時(shí),涉及當(dāng)前執(zhí)行進(jìn)程CPU環(huán)境的保存及新調(diào)度到進(jìn)程CPU環(huán)境的設(shè)置,而線程切換時(shí)只需保存和設(shè)置少量寄存器內(nèi)容,開(kāi)銷(xiāo)很小。此外,由于同一進(jìn)程內(nèi)的多個(gè)線程共享進(jìn)程的地址空間,因此,這些線程之間的同步與通信非常容易實(shí)現(xiàn),甚至無(wú)需操作系統(tǒng)的干預(yù)。

5) 地址空間和其他資源(如打開(kāi)的文件):進(jìn)程的地址空間之間互相獨(dú)立,同一進(jìn)程的各線程間共享進(jìn)程的資源,某進(jìn)程內(nèi)的線程對(duì)于其他進(jìn)程不可見(jiàn)。

6) 通信方面:進(jìn)程間通信(IPC)需要進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性,而線程間可以直接讀/寫(xiě)進(jìn)程數(shù)據(jù)段(如全局變量)來(lái)進(jìn)行通信。

線程的屬性

在多線程操作系統(tǒng)中,把線程作為獨(dú)立運(yùn)行(或調(diào)度)的基本單位,此時(shí)的進(jìn)程,已不再是一個(gè)基本的可執(zhí)行實(shí)體。但進(jìn)程仍具有與執(zhí)行相關(guān)的狀態(tài),所謂進(jìn)程處于“執(zhí)行”狀態(tài),實(shí)際上是指該進(jìn)程中某線程正在執(zhí)行。線程的主要屬性如下:
  1. 線程是一個(gè)輕型實(shí)體,它不擁有系統(tǒng)資源,但每個(gè)線程都應(yīng)有一個(gè)唯一的標(biāo)識(shí)符和一個(gè)線程控制塊,線程控制塊記錄了線程執(zhí)行的寄存器和棧等現(xiàn)場(chǎng)狀態(tài)。
  2. 不同的線程可以執(zhí)行相同的程序,即同一個(gè)服務(wù)程序被不同的用戶(hù)調(diào)用時(shí),操作系統(tǒng)為它們創(chuàng)建成不同的線程。
  3. 同一進(jìn)程中的各個(gè)線程共享該進(jìn)程所擁有的資源。
  4. 線程是處理機(jī)的獨(dú)立調(diào)度單位,多個(gè)線程是可以并發(fā)執(zhí)行的。在單CPU的計(jì)算機(jī)系統(tǒng)中,各線程可交替地占用CPU;在多CPU的計(jì)算機(jī)系統(tǒng)中,各線程可同時(shí)占用不同的CPU,若各個(gè)CPU同時(shí)為一個(gè)進(jìn)程內(nèi)的各線程服務(wù)則可縮短進(jìn)程的處理時(shí)間。
  5. —個(gè)線程被創(chuàng)建后便開(kāi)始了它的生命周期,直至終止,線程在生命周期內(nèi)會(huì)經(jīng)歷阻塞態(tài)、就緒態(tài)和運(yùn)行態(tài)等各種狀態(tài)變化。

線程的實(shí)現(xiàn)方式

線程的實(shí)現(xiàn)可以分為兩類(lèi):用戶(hù)級(jí)線程(User-LevelThread, ULT)和內(nèi)核級(jí)線程(Kemel-LevelThread,  KLT)。內(nèi)核級(jí)線程又稱(chēng)為內(nèi)核支持的線程。

在用戶(hù)級(jí)線程中,有關(guān)線程管理的所有工作都由應(yīng)用程序完成,內(nèi)核意識(shí)不到線程的存在。應(yīng)用程序可以通過(guò)使用線程庫(kù)設(shè)計(jì)成多線程程序。通常,應(yīng)用程序從單線程起始,在該線程中開(kāi)始運(yùn)行,在其運(yùn)行的任何時(shí)刻,可以通過(guò)調(diào)用線程庫(kù)中的派生例程創(chuàng)建一個(gè)在相同進(jìn)程中運(yùn)行的新線程。圖2-2(a)說(shuō)明了用戶(hù)級(jí)線程的實(shí)現(xiàn)方式。

在內(nèi)核級(jí)線程中,線程管理的所有工作由內(nèi)核完成,應(yīng)用程序沒(méi)有進(jìn)行線程管理的代碼,只有一個(gè)到內(nèi)核級(jí)線程的編程接口。內(nèi)核為進(jìn)程及其內(nèi)部的每個(gè)線程維護(hù)上下文信息,調(diào)度也是在內(nèi)核基于線程架構(gòu)的基礎(chǔ)上完成。圖2-2(b)說(shuō)明了內(nèi)核級(jí)線程的實(shí)現(xiàn)方式。

在一些系統(tǒng)中,使用組合方式的多線程實(shí)現(xiàn)。線程創(chuàng)建完全在用戶(hù)空間中完成,線程的調(diào)度和同步也在應(yīng)用程序中進(jìn)行。一個(gè)應(yīng)用程序中的多個(gè)用戶(hù)級(jí)線程被映射到一些(小于或等于用戶(hù)級(jí)線程的數(shù)目)內(nèi)核級(jí)線程上。圖2-2(c)說(shuō)明了用戶(hù)級(jí)與內(nèi)核級(jí)的組合實(shí)現(xiàn)方式。


圖2-2用戶(hù)級(jí)和內(nèi)核級(jí)線程

多線程模型

有些系統(tǒng)同時(shí)支持用戶(hù)線程和內(nèi)核線程由此產(chǎn)生了不同的多線程模型,即實(shí)現(xiàn)用戶(hù)級(jí)線程和內(nèi)核級(jí)線程的連接方式。

1) 多對(duì)一模型

將多個(gè)用戶(hù)級(jí)線程映射到一個(gè)內(nèi)核級(jí)線程,線程管理在用戶(hù)空間完成。

此模式中,用戶(hù)級(jí)線程對(duì)操作系統(tǒng)不可見(jiàn)(即透明)。

優(yōu)點(diǎn):線程管理是在用戶(hù)空間進(jìn)行的,因而效率比較高。

缺點(diǎn):當(dāng)一個(gè)線程在使用內(nèi)核服務(wù)時(shí)被阻塞,那么整個(gè)進(jìn)程都會(huì)被阻塞;多個(gè)線程不能并行地運(yùn)行在多處理機(jī)上。

2) 一對(duì)一模型

將每個(gè)用戶(hù)級(jí)線程映射到一個(gè)內(nèi)核級(jí)線程。

優(yōu)點(diǎn):當(dāng)一個(gè)線程被阻塞后,允許另一個(gè)線程繼續(xù)執(zhí)行,所以并發(fā)能力較強(qiáng)。

缺點(diǎn):每創(chuàng)建一個(gè)用戶(hù)級(jí)線程都需要?jiǎng)?chuàng)建一個(gè)內(nèi)核級(jí)線程與其對(duì)應(yīng),這樣創(chuàng)建線程的開(kāi)銷(xiāo)比較大,會(huì)影響到應(yīng)用程序的性能。

3) 多對(duì)多模型

將 n 個(gè)用戶(hù)級(jí)線程映射到 m 個(gè)內(nèi)核級(jí)線程上,要求 m <= n。

特點(diǎn):在多對(duì)一模型和一對(duì)一模型中取了個(gè)折中,克服了多對(duì)一模型的并發(fā)度不高的缺點(diǎn),又克服了一對(duì)一模型的一個(gè)用戶(hù)進(jìn)程占用太多內(nèi)核級(jí)線程,開(kāi)銷(xiāo)太大的缺點(diǎn)。又擁有多對(duì)一模型和一對(duì)一模型各自的優(yōu)點(diǎn),可謂集兩者之所長(zhǎng)。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
終于明白:有了線程,為什么還要有協(xié)程?
編程思想之多線程與多進(jìn)程(1)——以操作系統(tǒng)的角度述說(shuō)線程與進(jìn)程
操作系統(tǒng)中的進(jìn)程與線程
編程中國(guó) - 進(jìn)程、線程調(diào)度模型及其在Windows2000中的實(shí)現(xiàn)
JAVA多線程(一)基本概念和上下文切換性能損耗
看完這篇操作系統(tǒng),和面試官扯皮就沒(méi)問(wèn)題了。
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服