**:
執行緒建立之前
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 堆 由於堆是在程序空間中開闢出來的,所以它是理所當然...