什么是多線程 多線程詳細(xì)介紹
2022-10-10 10:22:25 閱讀(193)
相信很多沒有接觸計(jì)算機(jī)的人員都不知道多線程這一塊的相關(guān)內(nèi)容,很多人對(duì)這一個(gè)概念都不知道,下面小編就 給大家來詳細(xì)介紹一下什么是多線程 多線程詳細(xì)介紹這一塊的相關(guān)內(nèi)容,希望能幫助到大家。
什么是多線程
線程概念
線程:線程是進(jìn)程中的一條執(zhí)行流
以前我們學(xué)習(xí)進(jìn)程的時(shí)候,我們說進(jìn)程就是一個(gè)pcb,是程序動(dòng)態(tài)運(yùn)行的描述,通過pcb可以實(shí)現(xiàn)操作系統(tǒng)對(duì)程序運(yùn)行的調(diào)度管理。
在最早時(shí)候,進(jìn)程是一個(gè)pcb,操作系統(tǒng)通過pcb實(shí)現(xiàn)程序的運(yùn)行調(diào)度管理;然而學(xué)習(xí)多線程,因?yàn)榫€程是進(jìn)程中的一條執(zhí)行流,linux下通過pcb實(shí)現(xiàn)的,因此linux下的pcb實(shí)際上是一個(gè)進(jìn)程,并且這些pcb共用同一個(gè)虛擬地址空間,這些pcb更加輕量化,因此linux下的線程也被稱為輕量級(jí)進(jìn)程
線程和進(jìn)程關(guān)系
linux下的進(jìn)程其實(shí)是一個(gè)線程組,一個(gè)進(jìn)程中可以有多個(gè)線程(多個(gè)pcb),線程是進(jìn)程中的一條執(zhí)行流,類似于進(jìn)程就是一個(gè)工廠,線程就是工廠中干活的人(Linux下干活的就是pcb)
在linux中,pcb就是調(diào)度程序運(yùn)行的描述,一個(gè)pcb就可以調(diào)度一段程序的運(yùn)行;
線程是進(jìn)程中的一條執(zhí)行流,而這個(gè)執(zhí)行流Linux下就是通過pcb實(shí)現(xiàn)的,因此線程是一個(gè)pcb;并且這些pcb共享了進(jìn)程中的大部分資源,因此相較于傳統(tǒng)pcb更加輕量化。
進(jìn)程:是一個(gè)程序動(dòng)態(tài)的運(yùn)行,其實(shí)就是一個(gè)程序運(yùn)行的描述-pcb
線程:是進(jìn)程中的一條執(zhí)行流,執(zhí)行一個(gè)程序中的某段代碼
在linux操作系統(tǒng)內(nèi)核中,其實(shí)沒有線程的概念,只有輕量級(jí)進(jìn)程的概念
一個(gè)進(jìn)程中至少會(huì)有一個(gè)線程
根據(jù)學(xué)習(xí)階段的不同,對(duì)pcb有不同的理解
第一階段:pcb是進(jìn)程,用于調(diào)度一個(gè)程序運(yùn)行;
第二階段:pcb是線程,是輕量級(jí)進(jìn)程(就是為了跟印象中的傳統(tǒng)進(jìn)程加以區(qū)分),因?yàn)榫€程是運(yùn)行中程序的一條執(zhí)行流,linux下通過pcb實(shí)現(xiàn)這個(gè)執(zhí)行流,并且共用同一份運(yùn)行資源
進(jìn)程是操作系統(tǒng)資源分配的基本單位(操作系統(tǒng)會(huì)為一個(gè)程序的運(yùn)行分配所需的所有資源)
線程是cpu調(diào)度的基本單位;
線程之間的獨(dú)有與共享
獨(dú)有:標(biāo)識(shí)符,寄存器,棧,信號(hào)屏蔽字,errno
共享:虛擬地址空間(代碼段/數(shù)據(jù)段),文件描述符表,信號(hào)處理方式,用戶ID/組ID/工作路徑
為什么信號(hào)是先注銷,再處理?:信號(hào)是針對(duì)整個(gè)進(jìn)程通知時(shí)間進(jìn)行處理的,但是一個(gè)信號(hào)只需要被處理一次就夠了,然而一個(gè)進(jìn)程有可能會(huì)有多個(gè)執(zhí)行流,到底是誰處理這個(gè)事件(誰拿到時(shí)間片,誰能處理誰處理),有的線程不希望操作被信號(hào)被打斷,就可以獨(dú)立屏蔽這個(gè)信號(hào)----信號(hào)屏蔽字獨(dú)有原因
使用vfork創(chuàng)建一個(gè)子進(jìn)程;父子進(jìn)程共用同一個(gè)虛擬地址空間,但是父進(jìn)程會(huì)阻塞直到子進(jìn)程exit或者程序替換;
多線程,多個(gè)pcb作為獨(dú)立執(zhí)行流肯定是要同時(shí)運(yùn)行,如何做到不會(huì)調(diào)用?;靵y----棧獨(dú)有的原因
errno:系統(tǒng)調(diào)用完畢后重置的一個(gè)全局變量
多線程/多進(jìn)程進(jìn)行多任務(wù)處理的優(yōu)缺點(diǎn)分析
多線程優(yōu)點(diǎn):
線程間的通信更加靈活方便
線程的創(chuàng)建與銷毀成本更低
同一個(gè)進(jìn)程中的線程間調(diào)度成本更低
多進(jìn)程的優(yōu)點(diǎn):
多進(jìn)程的健壯性,穩(wěn)定性更高(異常以及一些系統(tǒng)調(diào)用exit直接針對(duì)整個(gè)進(jìn)程有效)
共同的優(yōu)點(diǎn):提高程序中的處理效率
IO密集型程序
CPU密集型程序
上面就是關(guān)于什么是多線程 多線程詳細(xì)介紹的全部內(nèi)容介紹,希望上面的內(nèi)容能幫助到大家,上面的這些介紹還是能給大家普及這一塊的相關(guān)知識(shí)。
未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明出處- 本文關(guān)鍵詞:
- 電腦軟件