Ho un processore dual core e secondo la spiegazione sono in grado di utilizzare solo 2 thread ma in realtà sono in grado di avviare più di 2 thread allo stesso tempo:multithreading su macchina dual core?
Ecco una copia della spiegazione:
procedimento hardware_concurrency statico(), fornito dalla classe boost :: filo, restituisce il numero di fili che potrebbero fisicamente essere eseguiti contemporaneamente in base al numero sottostante di CPU o CPU core. Chiamando questa funzione su una macchina dual-core comunemente utilizzata, viene restituito un valore di 2. Ciò consente un semplice metodo per identificare il numero massimo teorico di thread che deve essere utilizzato contemporaneamente da una determinata applicazione multithread.
hardware_concurrency() restituisce il numero 2 nel mio caso, ma questo programma utilizza 4 thread allo stesso tempo:
#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;
}
Qualcuno può spiegare che il comportamento?
Si può fare come tanti fili che si desidera (fino al limite), ma 2 è (probabilmente) il numero ottimale, uno per ogni core. Inoltre, dice "eseguito fisicamente allo stesso tempo". Puoi fare più di 2, ma non correranno fisicamente nello stesso momento; il sistema operativo dovrà anticipare quelli in esecuzione per consentire ad altri di funzionare. Inoltre, dice "dovrebbe", non "può". –
e quali sono gli effetti collaterali utilizzando per esempio l'applicazione con filettatura 10 su computer dualcore? è cattivo o no? molte grazie. – codekiddy
Gli effetti collaterali sono (probabilmente) limitati all'applicazione in esecuzione più lenta (poiché il sistema operativo deve preoccuparsi di lasciare che ogni altro thread abbia il suo tempo di funzionare, dove con 2, consente di eseguire la piena velocità continuamente), anche se può essere spostato essendo in grado di fare di più "contemporaneamente" (non proprio allo stesso tempo, ma indipendentemente). –