(一)多執行緒之執行緒理論

2022-08-02 10:21:12 字數 1802 閱讀 5491

一、什麼是執行緒

在傳統作業系統中,每個程序有乙個位址空間,而且預設就有乙個控制線程。

執行緒顧名思義,就是一條流水線工作的過程(流水線的工作需要電源,電源就相當於cpu),而一條流水線必須屬於乙個車間,乙個車間的工作過程是乙個程序,車間負責把資源整合到一起,是乙個資源單位,而乙個車間內至少有一條流水線。

所以,程序只是用來把資源集中到一起(程序只是乙個資源單位,或者說資源集合),而執行緒才是 cpu 上的執行單位。

多執行緒(即多個控制線程)的概念是:在乙個程序中存在多個執行緒,多個執行緒共享該程序的位址空間,相當於乙個車間內有多條流水線,都共用乙個車間的資源。

例如:北京地鐵與上海地鐵是不同的程序,而北京地鐵裡的13號線是乙個執行緒,北京地鐵所有的線路共享北京地鐵所有的資源,比如所有的乘客可以被所有線路拉。

二、執行緒的建立開銷小

建立程序的開銷要遠大於執行緒?

如果我們的軟體是乙個工廠,該工廠有多條流水線,流水線工作需要電源,電源只有乙個即cpu(單核cpu)

乙個車間就是乙個程序,乙個車間至少一條流水線(乙個程序至少乙個執行緒)

建立乙個程序,就是建立乙個車間(申請空間,在該空間內建至少一條流水線)

而建執行緒,就只是在乙個車間內造一條流水線,無需申請空間,所以建立開銷小

程序之間是競爭關係,執行緒之間是協作關係?

車間之間是競爭 / 搶電源的關係,競爭(不同的程序之間是競爭關係,是不同的程式設計師寫的程式執行的,迅雷搶占其他程序的網速,360把其他程序當做病毒乾死)

乙個車間的不同流水線式協同工作的關係(同乙個程序的執行緒之間是合作關係,是同乙個程式設計師寫的程式,迅雷內的執行緒是合作關係,不會自己幹自己)

三、執行緒與程序的區別

1,每啟動乙個程序,那麼這個程序中至少要有乙個執行緒。

2,程序是資源單位,並不能真正執行,而執行緒才是執行單位。

3,同乙個程序內的多個執行緒共享該程序內的位址資源。

4,建立執行緒的開銷要遠小於建立程序的開銷(建立乙個程序,就是建立乙個車間,涉及到申請空間,而且在該空間內建至少一條流水線,但建立執行緒,就只是在乙個車間內造一條流水線,無需申請空間,所以建立開銷小)。

四、為何要使用多執行緒

多執行緒指的是,在乙個程序中開啟多個執行緒,簡單的講:如果多個任務共用一塊位址空間,那麼必須在乙個程序內開啟多個執行緒。詳細的講分為4點:

1,多執行緒共享乙個程序的位址空間。

2,執行緒比程序更輕量級,執行緒比程序更容易建立可撤銷,在許多作業系統中,建立乙個執行緒比建立乙個程序要快10-100倍,在有大量執行緒需要動態和快速修改時,這一特性很有用。

3,若多個執行緒都是 cpu 密集型的,那麼並不能獲得效能上的增強,但是如果存在大量的計算和大量的 i/o 處理,擁有多個執行緒允許這些活動彼此重疊執行,從而會加快程式執行的速度。

4,在多 cpu 系統中,為了最大限度的利用多核,可以開啟多個執行緒,比開程序開銷要小的多。(這一條並不適用於python)。

五、多執行緒的應用

開啟乙個字處理軟體程序,該程序肯定需要辦不止一件事情,比如監聽鍵盤輸入,處理文字,定時自動將文字儲存到硬碟,這三個任務操作的都是同一塊資料,因而不能用多程序。只能在乙個程序裡併發地開啟三個執行緒,如果是單執行緒,那就只能是,鍵盤輸入時,不能處理文字和自動儲存,自動儲存時又不能輸入和處理文字。

Python多執行緒(一) 多執行緒的建立

在python3中,多執行緒主要使用threading模組 首先,來看乙個單任務模式的例子 import datetime,time defeat hotpot food for i in range 2 print datetime.datetime.now strftime x eat str ...

一 多執行緒 硬體基礎

目錄1.2快取一致性協議 1.3寫緩衝佇列與無效化佇列 處理器的處理能力要遠遠高於主記憶體dram的讀寫能力。進行一次主記憶體的讀寫所需要的時間,處理器可能足夠處理上百條指令。為了彌補處理器與主記憶體巨大的效率差距,處理器的設計者們引入了快取記憶體cache。快取記憶體的容量遠小於主記憶體,但是讀取...

C 多執行緒 一 多執行緒的相關概念

什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式。什麼是多執行緒...