黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

Python 線程

python 線程

一般來說,正如我們所知,線是一種非常薄的扭曲線,通常是棉或絲織物,用于縫制衣服等。同一術(shù)語線程也用于計算機編程領(lǐng)域?,F(xiàn)在,我們?nèi)绾螌⒂糜诳p制衣服的線程與用于計算機編程的線程聯(lián)系起來?這兩個線程執(zhí)行的角色類似。在衣服中,線將布料保持在一起,在另一側(cè),在計算機編程中,線程保持計算機程序并允許程序一次執(zhí)行順序動作或許多動作。

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

 

線程狀態(tài)

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

新線程

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

可運行

當(dāng)新生的線程啟動時,線程變?yōu)榭蛇\行,即等待運行。在此狀態(tài)下,它具有所有資源但仍未安排任務(wù)計劃程序運行。

運行

在此狀態(tài)下,線程進行并執(zhí)行任務(wù),任務(wù)調(diào)度程序選擇該任務(wù)來運行?,F(xiàn)在,線程可以進入死狀態(tài)或非可運行/等待狀態(tài)。

非運行/待機

在此狀態(tài)下,線程暫停,因為它正在等待某些i / o請求的響應(yīng)或等待其他線程的執(zhí)行完成。

死鎖

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

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

 

線程類型

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

用戶級線程

這些是用戶管理的線程。

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

用戶級線程的示例是 -

  • java線程
  • posix線程

用戶級線程的優(yōu)點

以下是用戶級線程的不同優(yōu)點 -

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

用戶級線程的缺點

以下是用戶級線程的不同缺點 -

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

內(nèi)核級線程

操作系統(tǒng)托管線程作用于內(nèi)核,內(nèi)核是操作系統(tǒng)核心。

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

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

內(nèi)核級線程的優(yōu)點

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

  • 內(nèi)核可以在多個進程上同時調(diào)度來自同一進程的多個線程。

  • 如果進程中的一個線程被阻塞,則內(nèi)核可以調(diào)度同一進程的另一個線程。

  • 內(nèi)核例程本身可以是多線程的。

內(nèi)核級線程的缺點

  • 內(nèi)核線程的創(chuàng)建和管理速度通常比用戶線程慢。

  • 在同一進程中將控制從一個線程轉(zhuǎn)移到另一個線程需要模式切換到內(nèi)核。

 

線程控制塊 - tcb

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

考慮以下與tcb中包含的線程相關(guān)的要點 -

  • 線程標(biāo)識 - 它是分配給每個新線程的唯一線程標(biāo)識(tid)。

  • 線程狀態(tài) - 它包含與 線程 的狀態(tài)(running,runnable,non-running,dead)相關(guān)的信息。

  • 程序計數(shù)器(pc) - 它指向線程的當(dāng)前程序指令。

  • 寄存器組 - 它包含分配給它們的線程寄存器值以進行計算。

  • 堆棧指針 - 它指向進程中線程的堆棧。 它包含線程范圍內(nèi)的局部變量。

  • 指向pcb 的指針 - 它包含指向創(chuàng)建該線程的進程的指針。

 

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

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

下表顯示了進程和線程之間的比較 -

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

 

多線程的概念

正如我們之前所討論的那樣,多線程是cpu通過并發(fā)執(zhí)行多個線程來管理操作系統(tǒng)使用的能力。多線程的主要思想是通過將進程劃分為多個線程來實現(xiàn)并行性。以更簡單的方式,我們可以說多線程是通過使用線程概念實現(xiàn)多任務(wù)處理的方式。

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

假設(shè)我們正在運行一個進程。這個過程可能是為了寫一些東西而打開ms字。在這樣的過程中,將分配一個線程來打開ms字,并且需要另一個線程來寫?,F(xiàn)在,假設(shè)我們想要編輯某些內(nèi)容,則需要另一個線程來執(zhí)行編輯任務(wù),依此類推。

下圖幫助我們了解內(nèi)存中存在多個線程 -

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

 

多線程的優(yōu)點

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

  • 通信速度 - 多線程提高了計算速度,因為每個核心或處理器同時處理單獨的線程。

  • 程序保持響應(yīng) - 它允許程序保持響應(yīng),因為一個線程等待輸入而另一個線程同時運行g(shù)ui。

  • 訪問全局變量 - 在多線程中,特定進程的所有線程都可以訪問全局變量,如果全局變量有任何變化,那么其他線程也可以看到它。

  • 資源利用 - 在每個程序中運行多個線程可以更好地利用cpu,并且cpu的空閑時間變得更少。

  • 共享數(shù)據(jù) - 每個線程不需要額外的空間,因為程序中的線程可以共享相同的數(shù)據(jù)。

 

多線程的缺點

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

  • 不適用于單處理器系統(tǒng) - 與多處理器系統(tǒng)的性能相比,多線程發(fā)現(xiàn)難以在單處理器系統(tǒng)上實現(xiàn)計算速度方面的性能。

  • 安全問題 - 我們知道程序中的所有線程共享相同的數(shù)據(jù),因此始終存在安全問題,因為任何未知線程都可以更改數(shù)據(jù)。

  • 復(fù)雜性增加 - 多線程可能會增加程序的復(fù)雜性,并且調(diào)試變得困難。

  • 導(dǎo)致死鎖狀態(tài) - 多線程可能導(dǎo)致程序達到死鎖狀態(tài)的潛在風(fēng)險。

  • 需要同步 - 需要 同步以避免互斥。這會導(dǎo)致更多內(nèi)存和cpu利用率。

下一節(jié):python 線程并發(fā)

相關(guān)文章