我有一個雙核心處理器,根據說明我只能使用2個線程,但實際上我能夠同時啓動2個以上的線程:雙核心機器上的多線程?
這裏是一個解釋的副本:
靜態hardware_concurrency()方法,由 升壓::線程類提供時,返回可以 物理上基於CPU或CPU內核的底層數 同時執行的線程的數目。在常用的 雙核機器上調用此函數,返回值2。這允許簡單的 方法來確定給定的多線程應用程序應該同時使用 的理論最大線程數。
hardware_concurrency()方法在我的情況下返回2號,但這個程序使用4個線程在同一時間:
#include <iostream>
#include <boost\thread.hpp>
using namespace std;
using boost::thread;
using namespace boost::this_thread;
using boost::posix_time::seconds;
void f1()
{
for(int i = 0; i < 10; ++i)
{
cout << i << endl;
sleep(seconds(2));
}
}
void f2()
{
for(int i = 0; i < 10; ++i)
{
cout << i << endl;
sleep(seconds(2));
}
}
int main()
{
// 4 threads are executed on dual core machine (no problem)
thread thr1(f1);
thread thr2(f2);
thread thr3(f1);
thread thr4(f2);
cin.ignore();
return 0;
}
任何人都可以解釋這種行爲?
,只要你想(到了極限)可以使盡可能多的線程,但2完成(可能)最佳數量,每個核心一個。另外,它說「同時實際執行」。你可以超過2個,但他們不會同時運行;操作系統將不得不搶先運行,讓其他人運行。另外,它說「應該」,而不是「可以」。 – 2012-01-10 20:02:26
以及在雙核機器上使用例如10個線程應用程序會產生哪些副作用?那是不是好?非常感謝。 – codekiddy 2012-01-10 20:04:39
副作用(可能)僅限於您的應用程序運行速度較慢(因爲操作系統不得不擔心讓每個其他線程都有時間運行,其中有2個,它可以讓它們全速運行),儘管這可能會抵消通過能夠「同時」做更多(不是一次,而是獨立)。 – 2012-01-10 20:05:45