為什么我的線程數(shù)越多計算時間反而慢了呢
首先我們應(yīng)該知道,操作系統(tǒng)是如何使用線程的。每個進程中可以啟動若干個線程,這些線程跟操作系統(tǒng)請求計算資源,操作系統(tǒng)也許沒我們想的那么智能,它不一定按照我們想要的方式去講線程與計算核心對應(yīng)起來。
比如,有時候,我們的線程內(nèi)部的計算需要在磁盤讀取數(shù)據(jù),這樣就會使得當前線程等待,操作系統(tǒng)就可能智能的把它掛起了,它的計算資源又被其它線程使用了,等到數(shù)據(jù)準備完畢之后,操作系統(tǒng)又將掛起的線程以及他的資源(寄存器數(shù)據(jù),緩存數(shù)據(jù))一同放到一個計算核心(計算資源)上(實際上操作系統(tǒng)可能不會吧所有緩存數(shù)據(jù)都拉出到內(nèi)存,但是如果在第一個線程等待時,插入的線程的使用了大量緩存,你的原有緩存數(shù)據(jù)就極有可能被沖掉了,就需要重新緩存),當然這個時候你被喚醒的線程可能不會再原有的核心上了,總之這種線程切換的過程會使得你的線程計算時間變慢了。
又比如,你的線程數(shù)量過多。這個情況下,如果線程的負載是雷同的,那么你的線程很可能被頻繁切換,這樣也會把時間變慢。不過不是說線程數(shù)比核心數(shù)少就好,這個要有個度。你的線程負載均衡的話,如果線程切換時間能很好的彌補掉線程掛起等待的時間,各個線程交錯執(zhí)行,完全占用計算資源,你的計算速度才會快。
以上只是一時興起,暫作之討論,不正確的地方,煩請批評指正,歡迎跟帖討論。





