相對(duì)于進(jìn)程而言朗恳,線程只有線程控制快蜜自,沒有所必須的運(yùn)行資源谤专,它的運(yùn)行資源共享進(jìn)程的運(yùn)行資源
1.線程控制塊信息
? ? (1)線程標(biāo)識(shí)符
? ? ? ? ? ? 為每個(gè)現(xiàn)場(chǎng)賦予唯一的線程標(biāo)識(shí)符
? ? ?(2)一組寄存器
? ? ? ? ? ? ? ?包括程序計(jì)數(shù)器PC、狀態(tài)寄存器和通用寄存器的內(nèi)容
? ? ? (3)線程運(yùn)行狀態(tài)
? ? ? ? ? ? ? ? 用于描述線程正處于何種運(yùn)行狀態(tài)
? ? ? ?(4)優(yōu)先級(jí)別
? ? ? ? ? ? ? ? 描述線程執(zhí)行的有線程度
? ? ? ? (5)線程專有存儲(chǔ)區(qū)
? ? ? ? ? ? ? ? 用于線程切換時(shí)存放現(xiàn)場(chǎng)保護(hù)信息和與該線程相關(guān)的統(tǒng)計(jì)信息等
? ? ? ? (6)信號(hào)屏蔽
? ? ? ? ? ? ? ? ?即對(duì)某些信號(hào)加以屏蔽
? ? ? ? ?(7)堆棧指針
2.線程狀態(tài)
? ? ? ? ? (1)創(chuàng)建狀態(tài)
? ? ? ? ? ? ? ? ? ?創(chuàng)建完線程控制塊,但是還沒有交給系統(tǒng)調(diào)度
? ? ? ? ? (2)就緒狀態(tài)
? ? ? ? ? ? ? ? ? ? 將線程控制快提交給線程調(diào)度器怠噪,具備執(zhí)行條件,但是還沒有活去到CPU時(shí)間片段
? ? ? ? ? (3)運(yùn)行狀態(tài)
? ? ? ? ? ? ? ? ? ? 線程獲取到CPU時(shí)間片段
? ? ? ? ? ?(4)阻塞狀態(tài)
? ? ? ? ? ? ? ? ? ? 線程在執(zhí)行中因某時(shí)間受到阻而處于暫停狀態(tài)杜跷,例如I/O操作傍念,等待操作
? ? ? ? ? ?(5)終止?fàn)顟B(tài)
? ? ? ? ? ? ? ? ? ? 該線程所在任務(wù)已經(jīng)執(zhí)行完成
3.線程的實(shí)現(xiàn)方式
? ? ? ? ? ? (1)內(nèi)核級(jí)線程
? ? ? ? ? ? ? ? ? ? ?在內(nèi)核空間和用戶空間同時(shí)存在線程控制塊,管理和調(diào)度均在內(nèi)核進(jìn)行
? ? ? ? ? ? ? ? ? ? 優(yōu)勢(shì):1.在多處理器系統(tǒng)中葛闷,內(nèi)核能夠同時(shí)調(diào)度同一進(jìn)程的多個(gè)線程并行執(zhí)行憋槐。2.如果進(jìn)程中的一個(gè)線程被阻塞了,內(nèi)核可以調(diào)度該進(jìn)程中的其他現(xiàn)場(chǎng)占有處理器運(yùn)行淑趾,也可以運(yùn)行其他進(jìn)程中的現(xiàn)場(chǎng)阳仔。3.內(nèi)核支持線程具有很小的數(shù)據(jù)結(jié)構(gòu)和堆棧,線程的切換比較快扣泊,切換開銷小近范。4.內(nèi)核本身也可以采用多線程技術(shù),可以提高系統(tǒng)的執(zhí)行速度和效率延蟹。
? ? ? ? ? ? ? ? ? ? 缺點(diǎn):對(duì)于用戶級(jí)線程而言评矩,其模式切換的開銷比較大,在同一個(gè)進(jìn)程中阱飘,從一個(gè)線程切換到另一個(gè)線程斥杜,需要從用戶態(tài)轉(zhuǎn)到核心態(tài)進(jìn)行,這是因?yàn)橛脩暨M(jìn)程中的線程運(yùn)行在用戶態(tài)沥匈,而現(xiàn)場(chǎng)調(diào)度和管理是在內(nèi)核實(shí)現(xiàn)的果录,系統(tǒng)開銷較大
? ? ? ? ? ? (2)用戶級(jí)線程
? ? ? ? ? ? ? ? ? ? 只有用戶空間存在線程控制塊,調(diào)度和管理均在用戶空間咐熙,對(duì)線程的創(chuàng)建弱恒、銷毀、通信與同步等功能都無需內(nèi)核支持棋恼,即用戶級(jí)線程是與內(nèi)核無關(guān)的返弹,其調(diào)度是以進(jìn)程為單位的锈玉,進(jìn)程進(jìn)行線程執(zhí)行
? ? ? ? ? ? ? ? ? 優(yōu)點(diǎn):1.線程切換不需要轉(zhuǎn)換到內(nèi)核空間。對(duì)一個(gè)進(jìn)程而言义起,其所有線程的管理數(shù)據(jù)結(jié)構(gòu)均在該進(jìn)程的用戶空間拉背,管理線程切換的線程庫(kù)也在用戶地址空間運(yùn)行, 因此進(jìn)程不必切換到內(nèi)核方式做線程管理默终,從而節(jié)省了模式切換的開銷椅棺。2.調(diào)度算法可以是進(jìn)程專用的,在不干擾操作系統(tǒng)調(diào)度的情況下齐蔽,不同的進(jìn)程可以根據(jù)自身需要選擇不同的調(diào)度算法两疚,對(duì)自己的線程進(jìn)行管理和調(diào)度,而與操作系統(tǒng)的低級(jí)調(diào)度算法是無關(guān)的含滴。3.用戶級(jí)線程的實(shí)現(xiàn)是與操作系統(tǒng)無關(guān)的诱渤,因?yàn)閷?duì)于線程管理的代碼是屬于用戶程序的一部分,所有的應(yīng)用程序都可以對(duì)之進(jìn)行共享谈况,因此勺美,用戶級(jí)線程甚至可以在不支持線程機(jī)制的操作系統(tǒng)上實(shí)現(xiàn)
? ? ? ? ? ? ? ? ? 缺點(diǎn):1.系統(tǒng)調(diào)用的阻塞問題,在基于進(jìn)程機(jī)制的操作系統(tǒng)中碑韵,大多數(shù)系統(tǒng)調(diào)用將使進(jìn)程阻塞赡茸,因此,當(dāng)一個(gè)線程執(zhí)行系統(tǒng)調(diào)用時(shí)祝闻,不僅該線程被阻塞占卧,而且,進(jìn)程內(nèi)的所有線程會(huì)阻塞治筒。而在內(nèi)核支持的線程方式中。則進(jìn)程中的其他線程依然可以運(yùn)行舷蒲。2.在單純的用戶級(jí)線程實(shí)現(xiàn)方式中耸袜,多線程應(yīng)用不能利用多處理機(jī)進(jìn)行多重處理的優(yōu)點(diǎn),內(nèi)核每次分配給一個(gè)進(jìn)程的僅有一個(gè)CPU牲平,因此堤框,進(jìn)程中僅有一個(gè)線程能執(zhí)行,在該線程放棄CPU之前纵柿,其他線程只能等待? ? ? ?
? ? ? ? ? ? ? (3)組合方式
? ? ? ? ? ? ? ? ? ? ? ? 多對(duì)一模型:將用戶線程映射到一個(gè)內(nèi)核控制線程蜈抓,僅當(dāng)用戶線程需要訪問內(nèi)核時(shí),才將其映射到一個(gè)內(nèi)核控制線程上沟使,但每次只允許一個(gè)線程進(jìn)行映射。優(yōu)點(diǎn):線程管理開銷小渊跋,效率高腊嗡。缺點(diǎn):一個(gè)線程在訪問內(nèi)核時(shí)發(fā)生阻塞着倾,則整個(gè)進(jìn)程都會(huì)被阻塞,任一時(shí)刻只有一個(gè)線程能夠訪問內(nèi)核燕少,多個(gè)線程不能同時(shí)在多個(gè)處理機(jī)上運(yùn)行
? ? ? ? ? ? ? ? ? ? ? ? 一對(duì)一模型:將一個(gè)用戶線程映射到一個(gè)內(nèi)核控制線程卡者。優(yōu)點(diǎn):一個(gè)線程阻塞可以調(diào)度另一個(gè)線程運(yùn)行,并發(fā)功能比較強(qiáng)客们,在多處理機(jī)上可以多線程并行的運(yùn)行在多處理器上崇决。缺點(diǎn):每創(chuàng)建一個(gè)用戶級(jí)線程相應(yīng)的 需要?jiǎng)?chuàng)建一個(gè)內(nèi)核控制線程,開銷較大
? ? ? ? ? ? ? ? ? ? ? ? 多對(duì)多模型:即將許多用戶線程映射到同樣數(shù)量或更少數(shù)量的內(nèi)核線程上底挫,他結(jié)合了上面兩個(gè)模型的優(yōu)點(diǎn)恒傻,他可以像一對(duì)一模型那樣一個(gè)進(jìn)程的多個(gè)線程并行的運(yùn)行在多處理機(jī)系統(tǒng)上,也可以像多對(duì)一模型那樣減少線程的管理開銷和提高效率
? ??????????????????
? ??????????????????