Linux 线程(1):线程概述
一、進(jìn)程與程序的區(qū)別
程序是應(yīng)用程序作為一個(gè)靜態(tài)文件存儲(chǔ)在計(jì)算機(jī)系統(tǒng)的硬盤等存儲(chǔ)空間中,而進(jìn)程則是處于動(dòng)態(tài)條件下由操作系統(tǒng)維護(hù)的系統(tǒng)資源管理實(shí)體,也就是程序的動(dòng)態(tài)執(zhí)行過程。
二、進(jìn)程與線程的區(qū)別
進(jìn)程是系統(tǒng)中程序執(zhí)行和資源分配的基本單位。每個(gè)進(jìn)程都擁有自己的數(shù)據(jù)段、代碼段、堆棧段。為了減小進(jìn)程切換的開銷,引入了線程的概念,線程是一個(gè)進(jìn)程內(nèi)的基本調(diào)度單位,也可以稱為輕量級(jí)進(jìn)程,線程是在共享內(nèi)存空間中并發(fā)的多道執(zhí)行路徑,共享一個(gè)進(jìn)程的資源。同進(jìn)程一樣,線程也將相關(guān)的變量值放在線程控制表內(nèi)。一個(gè)進(jìn)程可以有多個(gè)線程,也就是有多個(gè)線程控制表和堆棧寄存器,但卻共享一個(gè)用戶地址空間,而進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存空間。簡(jiǎn)而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。需要注意的是,每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。
三、線程分類
線程按照調(diào)度者可分為用戶級(jí)線程和核心級(jí)線程。
用戶級(jí)線程:主要解決上下文切換問題,它的調(diào)度算法和調(diào)度過程全部由用戶自行決定,運(yùn)行不需要內(nèi)核支持。在這里,操作系統(tǒng)往往會(huì)提供一個(gè)用戶空間線程庫(kù),該庫(kù)提供了線程的創(chuàng)建、調(diào)度、撤銷等功能,而內(nèi)核仍然僅對(duì)進(jìn)程進(jìn)行管理。如果一個(gè)進(jìn)程中某個(gè)線程調(diào)用了一個(gè)阻塞的系統(tǒng)調(diào)用,那么該進(jìn)程以及進(jìn)程中其他線程會(huì)同時(shí)被阻塞。由于這里的處理器時(shí)間片分配是以進(jìn)程為基本單位,所以每個(gè)線程執(zhí)行的時(shí)間相對(duì)減少。因此,用戶級(jí)線程在一個(gè)進(jìn)程的多線程調(diào)度中無(wú)法發(fā)揮多處理器優(yōu)勢(shì)。
核心級(jí)線程:由操作系統(tǒng)內(nèi)核創(chuàng)建和撤銷。內(nèi)核維護(hù)進(jìn)程及線程的上下文信息以及線程切換。一個(gè)內(nèi)核線程由于I/O操作而阻塞,不會(huì)影響其它線程的運(yùn)行。核心級(jí)線程允許不同進(jìn)程中線程按照同一相對(duì)優(yōu)先調(diào)度方法進(jìn)行調(diào)度,這樣可以發(fā)揮多處理器并發(fā)優(yōu)勢(shì)。
現(xiàn)在操作系統(tǒng)基本上采用用戶級(jí)線程與內(nèi)核級(jí)線程并存的方法,一個(gè)用戶級(jí)線程可以對(duì)應(yīng)一個(gè)或多個(gè)核心級(jí)線程。在發(fā)揮多處理機(jī)性能的同時(shí)最大限度減少調(diào)度開銷。
總結(jié)
以上是生活随笔為你收集整理的Linux 线程(1):线程概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: typescript+react+ant
- 下一篇: AI x 量化:华尔街老司机解密智能投资