先說結論:如果是“12核12執行緒”或者“14核14執行緒”與“10核20執行緒”比,可能我會選擇“10核20執行緒”。但如果是“16核16執行緒”,不考慮價格的情況下,建議選擇“16核16執行緒”。
核與執行緒的關係,其實是hardware resource和worker的關係,核數就是生產所需的工具集合(某些工具在這個集合裡面只有一套,某些有好幾套),執行緒數是能夠運用這些工具的工人數量。用一個奇妙的比喻來說明一下:
有兩個一樣的礦場,每個礦場都是80資源,分別採用“16核16執行緒”和“10核20執行緒”的工作模式,設每個工人使用一套工具每小時可以產生1資源,每個工人亦可以花費1小時將資源運送出去(無需工具)。則
礦場1:16個工人使用16套工具挖礦,5小時完成挖礦工作,之後16個工人花費5小時完成運輸工作,花費總時間為80/16 + 80/16 = 10小時。
礦場2:10個工人使用10套工具挖礦,另外10個工人待第1個小時過去後第一份資源產生可以開始運輸工作,花費總時間為80/10 + 1 = 9小時。
在這個場景裡面,經過最佳化的礦場2雖然耗時更短,但是在實際應用中有一定限制:1.需要多種不同的任務型別作為輸入;2.較好的流水或併發模型。在單一任務(挖礦或運輸)的情況下,前一種工作模式的優勢很明顯。
當然,實際應用中各個資源之間的關係不會像例子裡面簡單明瞭,資源(工具)在一個CPU裡面可能有多個,總體頻寬可能達到上限導致多核心資料傳輸優勢不能體現等等。
先說結論:如果是“12核12執行緒”或者“14核14執行緒”與“10核20執行緒”比,可能我會選擇“10核20執行緒”。但如果是“16核16執行緒”,不考慮價格的情況下,建議選擇“16核16執行緒”。
核與執行緒的關係,其實是hardware resource和worker的關係,核數就是生產所需的工具集合(某些工具在這個集合裡面只有一套,某些有好幾套),執行緒數是能夠運用這些工具的工人數量。用一個奇妙的比喻來說明一下:
有兩個一樣的礦場,每個礦場都是80資源,分別採用“16核16執行緒”和“10核20執行緒”的工作模式,設每個工人使用一套工具每小時可以產生1資源,每個工人亦可以花費1小時將資源運送出去(無需工具)。則
礦場1:16個工人使用16套工具挖礦,5小時完成挖礦工作,之後16個工人花費5小時完成運輸工作,花費總時間為80/16 + 80/16 = 10小時。
礦場2:10個工人使用10套工具挖礦,另外10個工人待第1個小時過去後第一份資源產生可以開始運輸工作,花費總時間為80/10 + 1 = 9小時。
在這個場景裡面,經過最佳化的礦場2雖然耗時更短,但是在實際應用中有一定限制:1.需要多種不同的任務型別作為輸入;2.較好的流水或併發模型。在單一任務(挖礦或運輸)的情況下,前一種工作模式的優勢很明顯。
當然,實際應用中各個資源之間的關係不會像例子裡面簡單明瞭,資源(工具)在一個CPU裡面可能有多個,總體頻寬可能達到上限導致多核心資料傳輸優勢不能體現等等。