多執行緒的優劣 效能 系統開銷

2021-07-13 15:13:25 字數 1028 閱讀 5792

**:

執行緒建立之前

1.系統為執行緒分配並初始化乙個執行緒核心物件;

2.系統為每個執行緒保留1mb的位址空間(按需提交)用於執行緒使用者模式堆疊;

3.系統為執行緒分配12kb(左右)的位址空間用於執行緒的核心模式堆疊。

執行緒建立之後

4.windows呼叫當前程序中的每個dll都有的乙個函式,用來通知程序中的所有dll,作業系統建立了乙個新的執行緒。

銷毀乙個執行緒時

5.當前程序中的所有dll都要接收乙個關於該執行緒即將"死亡"的通知;

6.執行緒的核心物件及建立時系統分配的堆疊需要釋放。

如果某台計算機只有乙個cpu的話,則在某一時刻只有乙個執行緒可以執行。

windows必須跟蹤記錄執行緒物件,而且不停地跟蹤記錄每個執行緒物件。

windows必須決定cpu下乙個次(每隔約20毫秒)排程那乙個執行緒使其執行。

上下文切換(context switch):windows使cpu停止執行乙個執行緒的**,而開始執行另乙個執行緒的**的現象,我們稱之為上下文切換。

上下文切換的開銷:

1.進入核心模式;

2.將cpu的暫存器儲存到當前正在執行的執行緒的核心物件中。

註明:x86架構下cpu暫存器佔了大約700位元組(byte)的空間,x64架構下cpu暫存器大約佔了1024(byte)的空間,ia64架構下cpu暫存器佔了大約2500byte的空間。

3.需要乙個自旋鎖(spin lock),確定下一次排程那乙個執行緒,然後再釋放該自旋鎖。

如果下一次排程的執行緒屬於同乙個程序,哪麼此處開銷更大,因為os必須先切換虛擬位址空間。

4.把即將要執行的執行緒的核心物件的位址載入到cpu暫存器中。

5.退出核心模式。

以上都是純粹的開銷,導致windows和應用程式的執行速度比在單執行緒系統上的執行速度慢。

綜上所述:應盡量限制執行緒的使用。

多執行緒的帶來的好處:

1.健壯性。

此執行緒的錯誤不會影響彼執行緒。

2.可擴充套件性。

多個cpu情況下,可充分發揮多個cpu的優勢。

多執行緒鎖競爭造成的開銷

這是執行結果 先看例項 include stdafx.h include include include include include include include include include using namespace std critical section cs unsigned ...

python多執行緒與多程序的選擇,以及優劣勢

多執行緒用於io密集型,如socket,爬蟲,web 多程序用於計算密集型,如金融分析 如果四個任務是計算密集型,多核意味著平行計算,在python中乙個程序中同一時刻只有乙個執行緒執行用不上多核,方案一勝 如果四個任務是i o密集型,再多的核也解決不了i o問題,方案二勝 from multipr...

多執行緒的作業系統

在支援多執行緒的作業系統中,假設程序p建立了若干個執行緒,那麼 47 是不能被其他執行緒共享的。47 a.該程序的 段 b.該程序中開啟的檔案 c.該程序的全域性變數 d.該程序中線程的棧指標 答案 d 解析 同一程序間的執行緒共享的資源包括 1 堆 由於堆是在程序空間中開闢出來的,所以它是理所當然...