Multithreading significa esattamente questo, esecuzione di più thread. Questo può essere fatto su un sistema uni-processor o su un sistema multiprocessore.
Su un sistema a processore singolo, quando si eseguono più thread, l'osservazione effettiva del computer che fa più cose contemporaneamente (ad esempio, il multi-tasking) è un'illusione, perché ciò che sta realmente accadendo sotto il cofano è che lì è un programmatore software che esegue il time-slicing sulla singola CPU. Quindi solo una singola attività sta accadendo in un dato momento, ma lo schedulatore sta passando da un'attività abbastanza veloce in modo che non si noti mai che ci sono più processi, thread, ecc. Che si contendono la stessa risorsa CPU.
Su un sistema multiprocessore, la necessità di time-slicing è ridotta. L'effetto del time-slicing è ancora lì, perché un SO moderno potrebbe avere centinaia di thread che contendono due o più processori, e in genere non c'è mai una relazione 1 a 1 nel numero di thread al numero di core di elaborazione disponibili. Quindi a un certo punto, un thread dovrà fermarsi e un altro thread inizia su una CPU condivisa dai due thread. Questo è di nuovo gestito dallo scheduler del SO. Detto questo, con un sistema multiprocessore, si può avere due cose che accadono allo stesso tempo, a differenza con il sistema uni-processor.
Alla fine, i due paradigmi sono davvero un po 'ortogonali nel senso che è necessario il multithreading ogni volta che si desidera avere due o più attività in esecuzione in modo asincrono, ma a causa del time-slicing, non è necessario necessariamente un multi- sistema di processore per farlo. Se si sta tentando di eseguire più thread e si sta svolgendo un'attività altamente parallela (ovvero, si tenta di risolvere un integrale), allora sì, più core si possono generare in un problema, meglio è. Non avrai necessariamente bisogno di una relazione 1-a-1 tra thread e core di elaborazione, ma allo stesso tempo, non vuoi far girare così tanti thread che finisci con tonnellate di thread inattivi perché devono aspettare essere programmato su uno dei core della CPU disponibili. D'altra parte, se le tue attività parallele richiedono un componente sequenziale, cioè un thread attenderà il risultato da un altro thread prima che possa continuare, allora potresti essere in grado di eseguire più thread con qualche tipo di barriera o metodo di sincronizzazione in modo tale che i thread che devono essere inattivi non girano via usando il tempo della CPU, e solo i thread che devono essere eseguiti contendono le risorse della CPU.
In una macchina multiprocessore che utilizza una libreria di thread come boost si avvantaggiano dei nuclei disponibili. Puoi anche avere più thread su un processore che può essere interlivellato con tecnologie come hyperthreading in Pentium 4. Intendevi multiprocesso e un sistema distribuito o multi-threading? Puoi fare entrambe le cose, ma la natura dei thread è ottenere il parallelismo indipendentemente dal processore. FYI boost si basa su thread di posix per quanto ne so e lo trovo abbastanza facile da usare. Anche il nuovo standard C++ 0x includerà il supporto del thread nativo alla lingua. – AJG85
Cosa ne pensi di Boost e Intel TBB? È più veloce di Intel TBB? O dovrei andare per Intel se ho un processore Intel? – Nazka
Intel TBB ha il vantaggio in alcune aree in cui fornisce primitive parallele ottimizzate come loop paralleli, ecc., Che aiutano nella creazione di algoritmi di stile scatter-gather parallelo su processori Intel, nonché altri calcoli paralleli. Boost threads è principalmente un pacchetto di threading multipiattaforma che verrà eseguito su molti tipi di piattaforme hardware e SO. Se invece hai bisogno di alcune primitive di calcolo parallelo, i thread Boost non forniscono direttamente questo, dovresti codificarli da soli. Quindi potresti considerare TBB come un'astrazione di livello superiore rispetto a Boost. – Jason