在Window環境下多執行緒與CPU資源分配原則

2021-08-03 16:46:30 字數 917 閱讀 6743

首先強調一下是在windownt環境下,linux是完全不同的效果,這取決於作業系統的cpu資源分配演算法。

背景介紹:

如果有三個(或者更多)執行緒非同步執行各自的演算法(不知道是哪個sb寫的演算法,相當耗資源),那麼這三個執行緒的cpu資源是如何分配的呢?

先上一段**和效果圖

如果將第24行注釋,結果截然不同,那麼threadsleep(0)的作用就明顯了,雖然從**邏輯上理解應該是執行緒sleep 0 毫秒,想多沒做任何事情,對於windows作業系統截然不同,這句話的意思系統理解為 這次不參與cpu資源競爭。

因為window的cpu資源分配時按照「民主」的方式進行分配的,所有需要資源的執行緒都在系統中排隊等候,系統會給他們分級,哪乙個最需要資源,哪乙個最不需要資源,相當於給每乙個資源申請者新增了乙個權值(如果申請者是個美女,權值自然就高)。當上乙個使用者釋放cpu之後,系統會安排下乙個去使用cpu(說了這麼多,也沒見到與linux有啥區別,但是下面就不一樣了),當使用者占用cpu之後,一定要占用著主動釋放,否則cpu將一直被占用。

所以,在做多執行緒的時候應該要注意資源的釋放。

如有錯誤,望指正!

c語言在window下的多執行緒例項

include include include include int piao 100 pthread mutex t mut void tprocess1 void args else pthread mutex unlock mut if a 1 return null void tproce...

redis在window環境下的安裝

客戶端檔案目錄說明 2.啟動redis服務端 1.在客戶端檔案目錄下新建乙個bat檔案 startservice.bat 檔案中的內容為 redis server redis.conf 2.雙擊startservice.bat,可看到服務端的啟動資訊,如下圖 3.啟動redis客戶端 1.在客戶端檔...

多執行緒環境下進行DEBUG

工具使用的是idea 1.debug模式下斷點的作用方式有兩種,all表示遇到斷點時,所有執行緒都會停滯在當前狀態中 並未掛起,依然都是可執行狀態 其他執行緒都無法繼續執行。當過掉這個斷點時,所有執行緒會同時開始爭搶cpu資源,這時是無法保證當前執行緒優先執行的。thread表示只中斷當前執行此行 ...