簡體   English   中英

多核系統上的C ++多線程

[英]C++ Multithreading on Multicore system

在四核CPU上運行以下代碼時,是否可以確保這四個線程將在四個不同的核上運行?

或者,操作系統可以根據系統的工作負載在單個內核上放置多個線程。 在這種情況下,由於上下文切換和其他線程開銷,運行多線程甚至可能會給您帶來性能損失。

我想沒有辦法編寫應用程序代碼,這迫使線程在不同的內核上運行嗎?

int main()
{
    std::vector<std::thread> threads(3);

    for (size_t i = 0; i < 3; i++)
    {
        threads[i] = std::thread(DoSomethingLengthy);
    }

    DoSomethingLengthy();

    for (auto& thread : threads)
    { 
        thread.join(); 
    }
}

除非你知道自己在做什么, 不要用親和力掩碼玩。

在現代系統上,調度是一個復雜的邏輯,涉及熱節流,緩存局部性,NUMA距離和許多因素。 對於您當前的計算機狀態,系統要比您(否則您甚至無權訪問任何信息)要更好地做出決策。

暫時,調度程序可能會決定將多個線程放在同一內核(以4GHz運行)上,只是讓另一個內核冷卻下來(以500MHz運行),其結果仍然比將線程均勻地放在所有內核上要好。

您可以嘗試設置親和力掩碼

該鏈接僅適用於Windows。因此,如果您使用的是其他操作系統,也可以查看此注釋

線程受操作系統控制。 第二個答案是正確的。 有特定於操作系統的API來控制此操作(通常需要更高的特權),但是c ++的答案是不能保證您...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM