[英]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運行),其結果仍然比將線程均勻地放在所有內核上要好。
線程受操作系統控制。 第二個答案是正確的。 有特定於操作系統的API來控制此操作(通常需要更高的特權),但是c ++的答案是不能保證您...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.