我知道這個問題很老,但是從2009年開始事情就有了變化。
現(xiàn)在有兩件事要考慮:內(nèi)核的數(shù)量和每個內(nèi)核內(nèi)可以運行的線程數(shù)。
對于Intel處理器,線程數(shù)是由超線程定義的,只有2個線程(如果可用的話)。但是超線程將您的執(zhí)行時間減少了兩個,即使不使用兩個線程!(即在兩個進程之間共享一個管道-當(dāng)您有更多進程時,這是很好的,否則就不太好了。更多的核心肯定會更好!)
在其他處理器上,您可能有2個、4個甚至8個線程。因此,如果您有8個內(nèi)核,每個內(nèi)核都支持8個線程,那么您可以有64個進程并行運行,而不需要上下文切換。
“沒有上下文切換”顯然是不正確的,如果您運行的是一個標(biāo)準(zhǔn)的操作系統(tǒng),它將為您無法控制的所有其他事情進行上下文切換。但這是主要想法。有些操作系統(tǒng)允許您分配處理器,因此只有您的應(yīng)用程序可以訪問/使用所述處理器!
根據(jù)我自己的經(jīng)驗,如果您有大量的I/O,多線程是很好的。如果您有很大的內(nèi)存密集型工作(讀源1,讀源2,快速計算,寫),那么有更多的線程是沒有幫助的。同樣,這取決于您同時讀寫的數(shù)據(jù)數(shù)量(例如,如果您使用SSE 4.2和讀取256位值,那么所有線程都會停止它們的步驟.換句話說,1線程的實現(xiàn)可能要容易得多,如果不是更快的話,它可能會更快。這將取決于您的進程和內(nèi)存體系結(jié)構(gòu),一些高級服務(wù)器為不同的核心管理不同的內(nèi)存范圍,因此如果您的數(shù)據(jù)被正確歸檔,單獨的線程將更快.這就是為什么在某些體系結(jié)構(gòu)上,4個進程的運行速度要快于4個線程的一個進程。)