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





