最近幫朋友寫了乙個多執行緒程式,他那邊一執行多執行緒就出錯,我這邊卻沒有任何問題,找了好久才找到解決方法,原來是cpu的問題,有朋友遇到同樣的問題,可以一起參考
//程序與指定cpu繫結
setprocessaffinitymask(getcurrentprocess(), dwmask);
//執行緒與指定cpu繫結
setthreadaffinitymask(getcurrentthread(),dwmask);
dwmask為cpu序號的或運算值:1(0001)代表只執行在cpu1,2(0010)代表只執行在cpu2,3(0011)代表可以執行在cpu1和cpu2,以此類推。
//使用8核cpu
setthreadaffinitymask(-1,254)
因此,若要將3個執行緒限制到cpu1、2和3上去執行,可以這樣操作
//thread 0 can only run on cpu 0.
setthreadaffinitymask(hthread0,
0001); //
第0位是1
setthreadaffinitymask(hthread1,
0002
); setthreadaffinitymask(hthread2,
0003
); setthreadaffinitymask(hthread3,
0004);
如果要將3個程序限制到cpu1、2和3上去執行,可以這樣操作
setprocessaffinitymask( hprocess0, 0001);//use cpu 0 only
setprocessaffinitymask( hprocess1,
0002 );//
use cpu 1 only
setprocessaffinitymask( hprocess2,
0003 );//
allow running on both cpus
setprocessaffinitymask( hprocess3,
0004 );//
use cpu 4 only
應用場景舉例:
將ui執行緒限制在乙個cpu,將其他實時性要求較高的執行緒限制在另乙個cpu。這樣,當ui需要占用大量cpu時間時,就不會拖累其他實時性要求較高的執行緒的執行。同樣可以將ui執行緒與一些優先順序不高但耗時的非同步運算執行緒設定在不同cpu上,避免ui給人卡頓的感覺。
Process 和 thread 的區別
日期 2013年4月24日 程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂。1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一...
Process程序 Thread執行緒
using system using system.collections.generic using system.linq using system.text using system.diagnostics namespace 程序process 通過程序來開啟一些應用程式 通過指定文件或應用...
python的thread和threading區別
python提供了多種模組用來支援多執行緒程式設計,thread 在python3中改名為 thread threading,和 queue模組。通過加入queue模組,使用者可以建立多個執行緒共享資料的佇列資料結構。thread和threading模組都可以用來建立和管理執行緒,而thread模組...