在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 線程
事件驅(qū)動(dòng)程序
反應(yīng)式編程
進(jìn)程池
線程
線程池
Python并發(fā)簡(jiǎn)介
并發(fā)vs并行
同步線程
調(diào)試線程應(yīng)用程序
進(jìn)程間通信
線程通信
Python并發(fā)編程教程
測(cè)試線程應(yīng)用程序
基準(zhǔn)和性能分析
系統(tǒng)和內(nèi)存架構(gòu)
線程的實(shí)現(xiàn)
多進(jìn)程

線程

一般來(lái)說(shuō),線是一種非常細(xì)的絲線,通常是棉或絲綢織物,用于縫制衣服等。 同樣的術(shù)語(yǔ)線程也被用于計(jì)算機(jī)編程領(lǐng)域。 現(xiàn)在,我們?nèi)绾螌⒂糜诳p制衣服的線與用于計(jì)算機(jī)編程的線相關(guān)聯(lián)? 這兩個(gè)線程執(zhí)行的角色類似。 在衣服中,線程將布料放在一起,在另一側(cè),在計(jì)算機(jī)編程中,線程持有計(jì)算機(jī)程序,并允許程序一次執(zhí)行順序操作或許多操作。

線程是操作系統(tǒng)中最小的執(zhí)行單元。 它本身不是一個(gè)程序,而是在程序中運(yùn)行。 換句話說(shuō),線程并不相互獨(dú)立,并與其他線程共享代碼段,數(shù)據(jù)段等。 這些線程也被稱為輕量級(jí)進(jìn)程。

線程狀態(tài)

為了深入理解線程的功能,我們需要了解線程的生命周期或不同的線程狀態(tài)。 通常,線程可以以五種不同的狀態(tài)存在。 下面顯示了不同的狀態(tài) -

新線程
新線程在新狀態(tài)下開始其生命周期。 但是,在這個(gè)階段,它尚未開始,也沒有分配任何資源。 我們可以說(shuō)它只是一個(gè)對(duì)象的實(shí)例。

可運(yùn)行
當(dāng)新出生的線程啟動(dòng)時(shí),線程變?yōu)榭蛇\(yùn)行的,即等待運(yùn)行。 在這種狀態(tài)下,它擁有所有資源,但仍然有任務(wù)調(diào)度程序沒有安排它運(yùn)行。

運(yùn)行
在此狀態(tài)下,線程進(jìn)行并執(zhí)行已由任務(wù)計(jì)劃程序選擇運(yùn)行的任務(wù)。 現(xiàn)在,線程可以進(jìn)入死態(tài)或不可運(yùn)行/等待狀態(tài)。

非運(yùn)行/待機(jī)
在這種狀態(tài)下,線程暫停,因?yàn)樗吹却硞€(gè)I/O請(qǐng)求的響應(yīng),要么等待其他線程執(zhí)行完成。

死鎖

可運(yùn)行線程在完成其任務(wù)或以其他方式終止時(shí)進(jìn)入終止?fàn)顟B(tài)。

下圖顯示了線程的完整生命周期 -

線程類型

在本節(jié)中,我們將看到不同類型的線程。 類型如下所述 -

用戶級(jí)線程
這些是用戶管理的線程。

在這種情況下,線程管理內(nèi)核不知道線程的存在。 線程庫(kù)包含用于創(chuàng)建和銷毀線程的代碼,用于在線程之間傳遞消息和數(shù)據(jù),用于調(diào)度線程執(zhí)行以及用于保存和恢復(fù)線程上下文。 應(yīng)用程序以單個(gè)線程開始。

用戶級(jí)線程的例子是 -

  • Java線程
  • POSIX線程

用戶級(jí)線程的優(yōu)點(diǎn)
以下是用戶級(jí)別線程的不同優(yōu)勢(shì) -

  • 線程切換不需要內(nèi)核模式特權(quán)。
  • 用戶級(jí)線程可以在任何操作系統(tǒng)上運(yùn)行。
  • 調(diào)度可以是用戶級(jí)別線程中特定于應(yīng)用程序的。
  • 用戶級(jí)線程可以快速創(chuàng)建和管理。

用戶級(jí)別線程的缺點(diǎn)
以下是用戶級(jí)別線程的不同缺點(diǎn) -

  • 在典型的操作系統(tǒng)中,大多數(shù)系統(tǒng)調(diào)用都是阻塞的。
  • 多線程應(yīng)用程序無(wú)法利用多處理。

內(nèi)核級(jí)線程
操作系統(tǒng)管理的線程在內(nèi)核上運(yùn)行,內(nèi)核是操作系統(tǒng)的核心。

在這種情況下,內(nèi)核執(zhí)行線程管理。 應(yīng)用程序區(qū)域中沒有線程管理代碼。 內(nèi)核線程直接由操作系統(tǒng)支持。 任何應(yīng)用程序都可以編程為多線程。 應(yīng)用程序中的所有線程都在單個(gè)進(jìn)程中受支持。

內(nèi)核維護(hù)整個(gè)流程和流程內(nèi)的各個(gè)線程的上下文信息。 內(nèi)核調(diào)度是基于線程完成的。 內(nèi)核在內(nèi)核空間中執(zhí)行線程創(chuàng)建,調(diào)度和管理。 內(nèi)核線程創(chuàng)建和管理通常比用戶線程要慢。 內(nèi)核級(jí)線程的例子是Windows,Solaris。

內(nèi)核級(jí)線程的優(yōu)點(diǎn)
以下是內(nèi)核級(jí)線程的不同優(yōu)點(diǎn) -

  • 內(nèi)核可以同時(shí)在多個(gè)進(jìn)程上安排來(lái)自同一進(jìn)程的多個(gè)線程。
  • 如果進(jìn)程中的一個(gè)線程被阻塞,則內(nèi)核可以調(diào)度同一進(jìn)程的另一個(gè)線程。
  • 內(nèi)核例程本身可以是多線程的。

內(nèi)核級(jí)線程的缺點(diǎn)

  • 內(nèi)核線程創(chuàng)建和管理通常比用戶線程要慢。
  • 在同一進(jìn)程內(nèi)將控制從一個(gè)線程轉(zhuǎn)移到另一個(gè)線程需要將模式切換到內(nèi)核。

線程控制塊 - TCB

線程控制塊(TCB)可以定義為操作系統(tǒng)內(nèi)核中的數(shù)據(jù)結(jié)構(gòu),主要包含有關(guān)線程的信息。 存儲(chǔ)在TCB中的線程特定信息將突出顯示有關(guān)每個(gè)進(jìn)程的一些重要信息。

考慮與TCB中包含的線程相關(guān)的以下幾點(diǎn) -

  • 線程標(biāo)識(shí) - 它是分配給每個(gè)新線程的唯一線程標(biāo)識(shí)(tid)。
  • 線程狀態(tài) - 它包含與線程狀態(tài)(運(yùn)行,可運(yùn)行,不運(yùn)行,死機(jī))有關(guān)的信息。
  • 程序計(jì)數(shù)器(PC) - 它指向線程的當(dāng)前程序指令。
  • 寄存器組 - 它包含分配給它們的線程的寄存器值用于計(jì)算。
  • 堆棧指針 - 它指向進(jìn)程中線程的堆棧。 它包含線程范圍內(nèi)的局部變量。
  • 指向PCB的指針 - 它包含指向創(chuàng)建該線程的進(jìn)程的指針。

進(jìn)程和線程之間的關(guān)系

在多線程中,進(jìn)程和線程是兩個(gè)非常緊密相關(guān)的術(shù)語(yǔ),具有相同的目標(biāo),使計(jì)算機(jī)能夠一次完成多個(gè)任務(wù)。 一個(gè)進(jìn)程可以包含一個(gè)或多個(gè)線程,但相反,線程不能包含進(jìn)程。 但是,它們?nèi)匀皇菆?zhí)行的兩個(gè)基本單位。 一個(gè)執(zhí)行一系列指令的程序啟動(dòng)進(jìn)程,并啟動(dòng)兩者。

下表顯示了進(jìn)程和線程之間的比較 -

編號(hào) 進(jìn)程 線程
1 進(jìn)程是重量或資源密集型的。 線程是輕量級(jí)的,比進(jìn)程占用更少的資源。
2 進(jìn)程切換需要與操作系統(tǒng)進(jìn)行交互。 線程切換不需要與操作系統(tǒng)交互。
3 在多個(gè)處理環(huán)境中,每個(gè)進(jìn)程執(zhí)行相同的代碼,但擁有自己的內(nèi)存和文件資源。 所有線程都可以共享相同的一組打開文件,子進(jìn)程。
4 如果一個(gè)進(jìn)程被阻塞,那么在第一個(gè)進(jìn)程解除阻塞之前,不能執(zhí)行其他進(jìn)程。 當(dāng)一個(gè)線程被阻塞并等待時(shí),同一個(gè)任務(wù)中的第二個(gè)線程可以運(yùn)行。
5 不使用線程的多進(jìn)程使用更多的資源。 多線程進(jìn)程使用更少的資源。
6 在多個(gè)進(jìn)程中,每個(gè)進(jìn)程獨(dú)立于其他流程運(yùn)作。 一個(gè)線程可以讀取,寫入或更改另一個(gè)線程的數(shù)據(jù)。
7 如果父進(jìn)程中有任何更改,則不會(huì)影響子進(jìn)程。 如果主線程中有任何更改,則可能會(huì)影響該進(jìn)程的其他線程的行為。
8 要與兄弟進(jìn)程進(jìn)行通信,進(jìn)程必須使用進(jìn)程間通信。 線程可以直接與該進(jìn)程的其他線程通信。

多線程的概念

正如我們前面討論過(guò)的,多線程是CPU通過(guò)并發(fā)執(zhí)行多個(gè)線程來(lái)管理操作系統(tǒng)使用的能力。 多線程的主要思想是通過(guò)將進(jìn)程分成多個(gè)線程來(lái)實(shí)現(xiàn)并行性。 以更簡(jiǎn)單的方式,多線程是通過(guò)使用線程的概念來(lái)實(shí)現(xiàn)多任務(wù)的方式。

以下示例的幫助可以理解多線程的概念。

示例

假設(shè)我們正在運(yùn)行一個(gè)進(jìn)程。 這個(gè)過(guò)程可能是為了寫一些東西而打開MS詞。 在這樣的過(guò)程中,一個(gè)線程將被分配以打開MS字,另一個(gè)線程將被要求寫入。 現(xiàn)在,假設(shè)想要編輯某些東西,那么將需要另一個(gè)線程來(lái)執(zhí)行編輯任務(wù)等等。

下圖解釋內(nèi)存中是否存在多個(gè)線程 -

我們可以在上面的圖中看到,一個(gè)進(jìn)程中可以存在多個(gè)線程,其中每個(gè)線程都包含自己的寄存器集和局部變量。 除此之外,進(jìn)程中的所有線程共享全局變量。

多線程的優(yōu)點(diǎn)

現(xiàn)在讓我們看看多線程的一些優(yōu)點(diǎn)。 優(yōu)點(diǎn)如下 -

  • 通信速度 - 多線程技術(shù)提高了計(jì)算速度,因?yàn)槊總€(gè)核心或處理器可以同時(shí)處理單獨(dú)的線程。
  • 程序保持響應(yīng) - 它允許程序保持響應(yīng),因?yàn)橐粋€(gè)線程等待輸入,另一個(gè)線程同時(shí)運(yùn)行GUI。
  • 訪問全局變量 - 在多線程中,特定進(jìn)程的所有線程都可以訪問全局變量,如果全局變量有任何變化,那么其他線程也可以看到它。
  • 資源的利用 - 在每個(gè)程序中運(yùn)行多個(gè)線程可以更好地使用CPU,并且CPU的空閑時(shí)間會(huì)變少。
  • 共享數(shù)據(jù) - 每個(gè)線程不需要額外的空間,因?yàn)槌绦蛑械木€程可以共享相同的數(shù)據(jù)。

多線程的缺點(diǎn)

現(xiàn)在讓我們看看多線程的一些缺點(diǎn)。 缺點(diǎn)如下 -

  • 不適用于單處理器系統(tǒng) - 與多處理器系統(tǒng)的性能相比,多線程技術(shù)難以實(shí)現(xiàn)單處理器系統(tǒng)的計(jì)算速度。
  • 安全性問題 - 由于程序中的所有線程共享相同的數(shù)據(jù),因此總是存在安全問題,因?yàn)槿魏挝粗€程都可以更改數(shù)據(jù)。
  • 復(fù)雜性增加 - 多線程會(huì)增加程序的復(fù)雜性,調(diào)試變得困難。
  • 導(dǎo)致死鎖狀態(tài) - 多線程會(huì)導(dǎo)致程序潛在的達(dá)到死鎖狀態(tài)的風(fēng)險(xiǎn)。
  • 需要同步 - 需要同步以避免互斥。這導(dǎo)致更多的內(nèi)存和CPU利用率。

上一篇:同步線程下一篇:進(jìn)程間通信