- 統(tǒng)信UOS應(yīng)用開發(fā)進(jìn)階教程
- 統(tǒng)信軟件技術(shù)有限公司
- 876字
- 2022-06-17 10:38:48
1.1 多線程的狀態(tài)和線程調(diào)度
線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。大部分情況下,線程包含在進(jìn)程中,是進(jìn)程中的實(shí)際運(yùn)作單位。一個(gè)線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)執(zhí)行多個(gè)線程,每個(gè)線程執(zhí)行不同的任務(wù)。
同一進(jìn)程中的多個(gè)線程共享該進(jìn)程中的全部系統(tǒng)資源,如虛擬地址空間、文件描述符、信號處理等。但同一進(jìn)程中的多個(gè)線程有各自的調(diào)用棧(Call Stack)、寄存器環(huán)境(Register Context),以及獨(dú)立的線程本地存儲(chǔ)(Thread-local Storage)。
在多核或多路處理器以及支持超線程(Hyper-threading)的處理器上使用多線程程序設(shè)計(jì)的好處是顯而易見的,即這樣的設(shè)計(jì)可提高程序的執(zhí)行吞吐率。即使是在單核處理器的計(jì)算機(jī)上,使用多線程技術(shù)也可以把進(jìn)程中負(fù)責(zé)輸入/輸出(I/O)處理、人機(jī)交互而常被阻塞的部分與密集計(jì)算的部分分開執(zhí)行,編寫專門的工作線程執(zhí)行密集計(jì)算,從而提高程序的執(zhí)行效率。
線程從創(chuàng)建、運(yùn)行到結(jié)束包括下面5個(gè)狀態(tài):新建狀態(tài)、就緒狀態(tài)、運(yùn)行狀態(tài)、阻塞狀態(tài)及死亡狀態(tài)。線程狀態(tài)之間的關(guān)系如圖1-1所示。

圖1-1 線程狀態(tài)之間的關(guān)系
一旦線程進(jìn)入可執(zhí)行狀態(tài),就會(huì)在就緒狀態(tài)與運(yùn)行狀態(tài)下轉(zhuǎn)換,同時(shí)也有可能進(jìn)入等待狀態(tài)或死亡狀態(tài)(線程執(zhí)行完畢即進(jìn)入死亡狀態(tài))。如果一個(gè)線程在運(yùn)行狀態(tài)下發(fā)出輸入/輸出請求,該線程將進(jìn)入阻塞狀態(tài);在其等待輸入/輸出結(jié)束時(shí),線程進(jìn)入就緒狀態(tài)。對于阻塞線程來說,即使系統(tǒng)資源空閑,線程依然不能回到運(yùn)行狀態(tài)。當(dāng)run函數(shù)執(zhí)行完畢時(shí),線程進(jìn)入死亡狀態(tài)。
計(jì)算機(jī)通常只有一個(gè)CPU,如果是單核CPU,在任意時(shí)刻只能執(zhí)行一條機(jī)器指令,每個(gè)線程只有獲得CPU的使用權(quán)才能執(zhí)行指令。所謂多線程的并發(fā)運(yùn)行,從宏觀上來看,指各個(gè)線程輪流獲得CPU的使用權(quán),分別執(zhí)行各自的任務(wù)。在運(yùn)行池中,會(huì)有多個(gè)處于就緒狀態(tài)的線程在等待CPU。線程調(diào)度是指按照特定機(jī)制為多個(gè)線程分配CPU的使用權(quán)。
線程調(diào)度有下面兩種方式。
● 分時(shí)調(diào)度(系統(tǒng)級別):所有線程輪流擁有CPU的使用權(quán),平均分配每個(gè)線程占用 CPU 的時(shí)間。
● 搶占式調(diào)度(語言級別):優(yōu)先級高的線程先使用CPU,如果可運(yùn)行線程池中的線程優(yōu)先級相同,就隨機(jī)選擇一個(gè)線程,使其占用CPU。處于運(yùn)行狀態(tài)的線程會(huì)一直運(yùn)行,直至其放棄CPU。
- 電腦組裝與系統(tǒng)安裝
- Citrix XenApp Performance Essentials
- PLC控制程序精編108例
- Linux網(wǎng)絡(luò)操作系統(tǒng)與實(shí)訓(xùn)(第三版)
- Windows Server 2012 Hyper-V Cookbook
- Linux Shell編程從入門到精通(第2版)
- Windows Phone 8 Application Development Essentials
- STM32庫開發(fā)實(shí)戰(zhàn)指南:基于STM32F4
- Application Development in iOS 7
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)(Windows 7+Office 2016)
- 跟老男孩學(xué)Linux運(yùn)維:Shell編程實(shí)戰(zhàn)
- Windows 7實(shí)戰(zhàn)從入門到精通(超值版)
- Linux內(nèi)核API完全參考手冊(第2版)
- CSS揭秘
- Azure Resource Manager Templates Quick Start Guide