關於多執行緒程式設計和CPU多核多執行緒的關係?

時間 2021-05-05 22:53:05

1樓:佐佐浪

具體到你的例子,修改優先順序和修改時間片是無法達到這個效果的。你需要做的是把你的計算部分做成並行的。單獨乙個執行緒是達不到你要的效果的。

2樓:棒子先生

首相我們了解下為什麼需要用到4核,這是由於不能盲目的提高CPU的主頻和頻寬,這樣會產生各種實際很難處理的問題,比如溫度飆公升等。舉例來說我們需要乙個16G Hz的CPU才能在規定的時間內完成我們的計算任務,但是這個很難實現,所以我們曲線救國,把它拆成4個4G Hz的CPU(不考慮額外開銷)。

執行緒是CPU處理實際業務的實體,就是說乙個CPU只能執行乙個執行緒,需要執行其他執行緒就必須要把當前的執行緒「掛」起來,再去執行。

從上面分析我們可以在知道4個CPU至少需要4個執行緒,才能把CPU全部利用起來。如果「16G Hz CPU」 拆分成8個2G Hz的CPU,就需要8個執行緒,依次類推。

你要加強你你的程式的計算能力,就需要多建立幾個執行緒把每個實際的物理CPU都利用起來,這個就是演算法的分解和合併能力了。簡單舉個例子,我們有乙個32核心的志強CPU,通過查詢字典的方式暴力破解密碼,可以直接建立32個執行緒,把字典拆成32個部分,每乙個執行緒運算乙個部分,並行化的計算。

3樓:

你的問題對於稍微學過一些作業系統知識的人而言都會顯得十分簡單,可能有點幼稚(原諒我用這個詞語),但我沒有一絲嘲諷的意思。無知才是人類具有追求意識的起源,很多人自認為懂的很多,但他們不一定有自己的想法。

其他答主的解釋我還沒來得及細看,大概歸結起來可以這麼說,計算資源是大家共享的,只要還有執行緒沒有做完,而系統也還有空閒的資源,就可以拿來用。所以,一般是不用擔心浪費這個問題的。

但你直覺上有這個困擾,這是個好的現象,你可以自己著手去想一些解決方案,然後跟現有的比較,說不定你會有些什麼新的見解也不一定,計算機還是一門很新的科學,不要被已有的東西束縛住,在這個領域裡,因為每個人都具有自己的生產資料——大腦,而且跟數學等學科不一樣,你可以一邊學習一邊賺錢,所以每個人都可以做出一些獨到的貢獻。

比如這個問題上,反映的乙個事實就是,如果我的執行緒少於計算核心/硬體執行緒數量怎麼辦?已有的系統這個時候是沒有辦法的,當然其中乙個核心可能時候會不停的計算的,但其他的只能乾瞪眼了。曾經有一段時間,AMD被Intel狠狠的蹂躪的時候,有傳言說AMD提出了一種技術,可以在需要的時候把幾個核心合併成乙個大核心,從而提高單執行緒的運算速度。

一些不知底細的擁躉們為此歡呼雀躍。這是為什麼呢,多個核心打不過並在一起也還是打不過啊?原因就在於大多數程式,特別是當時的一些遊戲程式還不能充分發揮多個核心的計算能力。

解決的辦法當然很簡單,就是增加執行緒數量,但這個時候就加大了軟體開發的困難,就是你正在學習的那些東西。另外乙個方面的問題是很多執行緒的話,可能只有一部分可以被執行而其他執行緒必須休息,這樣相互輪流,在一些需要同時處理很多併發事務的場合,這是經常遇到的。繼而帶來的一些問題是,大量執行緒相互輪流執行機制本身帶來了一些額外的開銷;而且為了充分利用計算資源,在多核心系統下需要把比如乙個本來是順序執行的計算任務拿來分成可以並行的子任務,也需要考慮如何分解它同時最大化執行效率;隨著核心越來越多,這些問題會變得嚴重起來。

對於計算資源利用的乙個誤解是,看著CPU的佔用率很低覺得不可思議,覺得它沒幹活。這是因為CPU的計算速度遠超人的想象,乙個看起來很複雜的具有成千上萬步的計算過程,對CPU來說可能只是幾個ms的事情,而統計運算開銷的週期可能是在秒級以上的,所以大部分時候CPU的佔用率都是很低的,因為的確沒有那麼多事情給它做,大部分時間它都空閒在那裡,等待著下乙個任務被激發,這一般是乙個外部事件,通過中斷傳遞給CPU最終把整個系統的執行狀態不斷向前推進。

4樓:

從C++來說,同乙個執行緒只會跑在同乙個核心上,而多個執行緒一般來說(預設的)跑在多個核心上——編譯器和作業系統會負責處理的事情

多核多執行緒cpu在日長中有什麼用?

輕逝花落空 那要看你的應用是更耗顯示卡一些還是更耗處理器。其實不是 最近 而是十年前CPU就進入了多核時代,現在不管電腦還是智慧型手機上的程式,都對多核心有優化,可以說你用電腦和智慧型裝置的時候無時不刻不在使用多執行緒,所以這個 有什麼用 無從談起了。如果現在你可以買到一塊單核單執行緒的CPU,用了...

多核,單核,多執行緒,單執行緒搞不明白?

乙個核對應乙個工人的話,乙個執行緒對應於乙個日程表單核單執行緒,相當於乙個工人乙個日程表,第一步買水泥,第二步搬磚,第三部砌牆。結果下了單水泥要明天到,今天就只能等著幹不了活了。如果有兩張日程表,第一張買水泥,第二張搬磚和砌牆,那麼你可以下單買水泥,水泥要等,就放下第一張日程表,拿起第二張,開始搬磚...

關於muduo多執行緒日誌的疑惑?

陳碩 首先,muduo 日誌是 diagnostic logging,不是資料庫的 write ahead logging。如果你要求 不丟失資料 那就不要用 muduo 日誌。其實你在 core dump 裡可以找到 buffer 中的日誌訊息,FixedBuffer cookieStart 就是...