操作系統(tǒng)與線程的關(guān)系 cpu 12個(gè)線程都能用上嗎?
cpu 12個(gè)線程都能用上嗎?不肯定會(huì)。簡(jiǎn)單啊點(diǎn)說吧,處理器核數(shù)(真包含超線程數(shù))是一種不能執(zhí)行資源,資源數(shù)量就是核數(shù)個(gè)數(shù)。應(yīng)用程序的線程數(shù)應(yīng)該是服務(wù)什么只是請(qǐng)求數(shù)。而操作系統(tǒng)的作用是要是用太遠(yuǎn)的資源
cpu 12個(gè)線程都能用上嗎?
不肯定會(huì)。
簡(jiǎn)單啊點(diǎn)說吧,處理器核數(shù)(真包含超線程數(shù))是一種不能執(zhí)行資源,資源數(shù)量就是核數(shù)個(gè)數(shù)。應(yīng)用程序的線程數(shù)應(yīng)該是服務(wù)什么只是請(qǐng)求數(shù)。而操作系統(tǒng)的作用是要是用太遠(yuǎn)的資源來服務(wù)好應(yīng)用程序的請(qǐng)求,這就是進(jìn)程調(diào)度指揮的功能。
一般情況下,服務(wù)只是請(qǐng)求線程會(huì)“相對(duì)公平”地先分配到核上啟動(dòng),并且在時(shí)間片上兩人一組使用的,即心內(nèi)膜炎負(fù)責(zé)執(zhí)行(不肯定會(huì)是右行先執(zhí)行)。
例如系統(tǒng)有4個(gè)核,如果:
1、唯有3個(gè)線程,那就未分配到3個(gè)核上運(yùn)行
2、僅有8個(gè)線程,那肯定每個(gè)核分配兩個(gè)線程不運(yùn)行
3、只有10個(gè)線程,就得有些核跑3個(gè)線程,有些核跑2個(gè)線程
cpu線程什么意思?
線程(英語:thread)是操作系統(tǒng)能夠通過運(yùn)算指揮調(diào)度的小于單位。它被乾坤二卦在進(jìn)程之中,是進(jìn)程中的不好算運(yùn)作單位。一條線程指的是進(jìn)程中另一個(gè)單個(gè)體順序的控制流,一個(gè)進(jìn)程中是可以并發(fā)多個(gè)線程,每條線程左行負(fù)責(zé)執(zhí)行差別的任務(wù)。
在UnixSystemV及SunOS中也被稱作輕量進(jìn)程(lightweightprocesses),但輕量進(jìn)程許多指內(nèi)核線程(kernelthread),而把用戶線程(userthread)被稱線程。
一個(gè)進(jìn)程可以不有很線程,每條線程并行執(zhí)行差別的任務(wù)。
在多核或多CPU,或支持Hyper-threading的CPU上可以使用多線程程序設(shè)計(jì)的好處是非常明顯,即提高了程序的執(zhí)行吞吐率。
在單CPU單核的計(jì)算機(jī)上,在用多線程技術(shù),也也可以把進(jìn)程同負(fù)責(zé)I/O一次性處理、人機(jī)交互而常被阻塞的部分與猛烈算出的部分能分開來執(zhí)行,c語言程序拿來的workhorse線程執(zhí)行尖銳計(jì)算,使增加了程序的執(zhí)行效率。
擴(kuò)充卡資料:
線程與進(jìn)程的區(qū)別可以不綜合歸納為以下4點(diǎn):
1)地址空間和其它資源(如再打開文件):進(jìn)程間彼此獨(dú)立,不同進(jìn)程的各線程間共享。某進(jìn)程內(nèi)的線程在其它進(jìn)程絕不可以見。
2)通信:進(jìn)程間通信IPC,線程間這個(gè)可以就讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來通過通信——要進(jìn)程離線和互斥手段的輔助,以絕對(duì)的保證數(shù)據(jù)的一致性。
3)調(diào)度和切換到:線程上下文切換比進(jìn)程上下文切換要快得多。
4)在多線程OS中,進(jìn)程不是一個(gè)可想執(zhí)行的實(shí)體。
線程間通信有哪些方式?
多線程通信的方法通常有200以內(nèi)三種:
1.全局變量
進(jìn)程中的線程間內(nèi)存共享,這是比較好常用的通信和交互。
注:定義全局變量時(shí)好是建議使用volatile來定義,以防編譯器因此變量參與優(yōu)化軟件。
消息機(jī)制
具體方法的Message通信的接口主要注意有兩個(gè):PostMessage和PostThreadMessage,
PostMessage為線程向主窗口接收消息。而PostThreadMessage是不可以兩個(gè)線程之間的通信接口。
()
函數(shù)原型:
B00LPostMessage(HWND hWnd,UINTMsg,WPARAMwParam,LPARAMlParam);
參數(shù):
hWnd:其窗口程序接收消息的窗口的句柄。兩種方法有某種特定含義的兩個(gè)值:
:消息被郵寄到系統(tǒng)的所有頂層窗口,以及不能解除或不可見的非自身強(qiáng)大的窗口、被瞬間覆蓋的窗口
和彈出式窗口。消息不被郵寄到子窗口。
NULL:此函數(shù)的操作和內(nèi)部函數(shù)參數(shù)dwThread設(shè)置為當(dāng)前線程的標(biāo)識(shí)符PostThreadMessage函數(shù)完全不一樣。
Msg:指定你被寄送的消息。
wParam:指定你附帶的消息某個(gè)特定的信息。
IParam:指定你附帶的消息某一特定的信息。
返回值:如果不是方法調(diào)用完成,返回非零值:假如執(zhí)行函數(shù)失敗的話,返回值是零。
ck還提供給了SendMessage方法進(jìn)行消息間通訊,SendMessage(),他和PostMessage的區(qū)別是:
SendMessage是歌詞同步的,而PostMessage是異步運(yùn)行的。SendMessage需要等郵箱里的消息執(zhí)行之后,才前往。
()
PostThreadMessage方法也可以將消息發(fā)送到委托線程。
函數(shù)原型:BOOLPostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM lParam)
參數(shù)除開ThreadId之外,都差不多和PostMessage是一樣的。
目標(biāo)線程()方法來接受消息。
注:可以使用這個(gè)方法時(shí),目標(biāo)線程需要已經(jīng)有自己的消息隊(duì)列。否則不會(huì)回ERROR_INVALID_THREAD我的id錯(cuò)誤。也可以用
PeekMessage()給線程創(chuàng)建家族消息隊(duì)列。
3.CEvent對(duì)象CEvent為MFC中的一個(gè)對(duì)象,可以實(shí)際對(duì)CEvent的能觸發(fā)狀態(tài)進(jìn)行決定,使實(shí)現(xiàn)線程間的通信和同步。