多線程的由來(lái)
多進(jìn)程存在進(jìn)程之間通訊與共享數(shù)據(jù)的問(wèn)題,與進(jìn)程設(shè)計(jì)相悖
多進(jìn)程系統(tǒng)開(kāi)銷大,包含創(chuàng)建進(jìn)程,進(jìn)程結(jié)束和進(jìn)程之間的切換
需要在進(jìn)程內(nèi)部增加一類實(shí)體滿足實(shí)體之間可以并發(fā)執(zhí)行。實(shí)體之間可以共享相同的地址空間
線程的概念
線程是進(jìn)程的一部分,描述指令流執(zhí)行狀態(tài).它是進(jìn)程中指令流的最小單元,是CPU調(diào)度的基本單位。
優(yōu)點(diǎn):
一個(gè)進(jìn)程中可以同時(shí)存在多個(gè)線程
各個(gè)線程之間可以并發(fā)執(zhí)行
各個(gè)線程之間可以共享地址空間和文件資源
缺點(diǎn):
一個(gè)線程崩潰,會(huì)導(dǎo)致所屬進(jìn)程全線崩潰
線程的實(shí)現(xiàn)
用戶線程
有一組用戶級(jí)的線程庫(kù)函數(shù)來(lái)完成線程的管理,包括線程的創(chuàng)建 終止 同步和調(diào)度
特征
不依賴與操作系統(tǒng)的內(nèi)核 內(nèi)核不了解用戶線程的存在
可用于不支持線程的多進(jìn)程操作系統(tǒng)
每個(gè)進(jìn)程有私有的線程控制塊(TCB)列表
TCB由線程庫(kù)函數(shù)維護(hù)
同一進(jìn)程內(nèi)用戶線程切換速度快 無(wú)需用戶態(tài)與內(nèi)核態(tài)切換
允許每個(gè)進(jìn)程擁有自己的線程調(diào)度算法
缺點(diǎn)
線程發(fā)起系統(tǒng)調(diào)用而阻塞時(shí),則整個(gè)進(jìn)程進(jìn)入等待
不支持基于線程的處理機(jī)搶占 除非當(dāng)前運(yùn)行的線程主動(dòng)放棄,它所在的進(jìn)程的其他線程無(wú)法搶占CPU
只能按進(jìn)程分配CPU時(shí)間 多個(gè)線程進(jìn)程中,每個(gè)線程分配的時(shí)間片比較少
內(nèi)核線程
由內(nèi)核通過(guò)系統(tǒng)調(diào)用實(shí)現(xiàn)的線程機(jī)制,由內(nèi)核完成線程的創(chuàng)建 終止和管理
特征
由內(nèi)核維護(hù)PCB和TCB
線程執(zhí)行系統(tǒng)調(diào)用而被阻塞不影響其他線程
以線程為單位進(jìn)行CPU時(shí)間分配 多線程的進(jìn)程可獲得更多CPU時(shí)間片
缺點(diǎn)
線程的創(chuàng)建 終止 切換通過(guò)系統(tǒng)調(diào)用在內(nèi)核種實(shí)現(xiàn)所以開(kāi)銷較大