多執行緒網路程式設計中如何合理地選擇執行緒數?

時間 2021-05-05 22:52:02

1樓:jameswhale

若業務是CPU計算型,建立比CPU核多的執行緒的確是沒有意義的,徒增執行緒的切換開銷。若業務是IO密集型的,可以建立比CPU核數多一些的執行緒,實際經驗是一般設定為2倍。

2樓:戈君

需要的執行緒數 = qps * latency(單位秒)。 依據是little's law,類似的應用是tcp中的bandwidth-delay product。如果這個數目遠大於核心數量,應該考慮用非同步介面。

舉例:qps = 2000,latency = 10ms,計算結果 = 2000 * 0.01s = 20。和常見核數在同乙個數量級,用同步。

qps = 100, latency = 5s, 計算結果 = 100 * 5s = 500。和常見核數不在同乙個數量級,用非同步。

qps = 500, latency = 100ms,計算結果 = 500 * 0.1s = 50。和常見核數在同乙個數量級,可用同步。如果未來延時繼續增長,考慮非同步。

3樓:

按照常見程度~~ 三種情況吧~~

a. 假設最終cpu計算是瓶頸的話【大多數是這樣】,在處理流程固定的情況下,要看每個request中純cpu計算/整個request處理時間,假設是10%【90%時間阻塞住在io,網路等待~~】, 那差不多 16核 * 10~ 這種多執行緒或者多程序模式,需要考慮到系統級的執行緒切換所帶來的效能開銷~~~

b. 如果整個request都使用了非阻塞方式處理,那核心個執行緒ok啦~

c. 如果cpu不是瓶頸~~那麼~~ 記憶體~~ 網絡卡~~ IO~~這幾種資源就是木桶,在滿足資源的情況下,達到最大的吞吐和可以接受的rt~~ 就是目標了吧~~

4樓:

理想情況下執行緒數就是你的邏輯核心數量-1。

實際情況不可能那麼理想(每個執行緒都無阻塞的瘋狂跑)。這就需要你測試了,也許是10倍邏輯核心數,或者50倍都沒準,但不會太高,執行緒切換也需要開銷。

但是最關鍵的是,你要選線程數肯定是為了效能優化,那麼首先,你要找bottleneck,就好比乙個木桶盛水量是由最短那個板決定的。

假如找不到最短那塊木板,錯搞其它木板,搞得再高也沒一點用,白費力氣。

假若把所有木板都搞一遍,浪費時間, 事倍功半 。

假若每次都找準最短木板,則事半功倍 。

5樓:

你用Boost的話,

#include

unsigned

concurentThreadsSupported=boost

::thread

::hardware_concurrency();可以得到硬體執行緒數。有幾個硬體執行緒,你就開幾個軟體執行緒好了。

當然,你要保證這些執行緒,全都不呼叫阻塞的API。如果有阻塞,有等待,比如要做輸出的話,多開幾個執行緒,可能更合適。

在所有執行緒都不阻塞的情況下,超出硬體執行緒數的軟體執行緒,或者得不到執行的機會,也就沒有意義;或者,更糟糕的,被作業系統排程來排程去,白白帶來執行緒切換的開銷……

如何合理地禁慾?

夏知桃 長期壓抑X谷欠望,人體對X刺激會漸漸遲鈍,時間一長,就會變得清心寡欲,見色不起意,小弟弟也會退化。請注意,這裡是長時間禁谷欠,而不是短時間,短時間的禁谷欠,會產生很強力的爆發力,所以X生活節奏既不要過多,也不要太少,長時間不用是會退化的喲 為了保持公尺青子最佳的質量,既不要縱谷欠也不要禁谷欠...

如何科學合理地增肥

可你兔兔 1 改善體質 在日常生活中,有些人只所以過於消瘦是由於腸胃吸收不好導致的,因此想要增肥需要先從改善體質入手。2 盡量多吃 據相關研究表明,人體每天需要的正常熱量在2200 2400千卡左右。建議比較消瘦的人比平時多攝入1 4 1 3的食物量。而且要注意少吃多餐,把原來的一日三餐改為多餐,比...

如何迅速且合理地反駁別人?

逆生菌 其實有一種很簡單且實用的句式可用來反駁 陰陽怪氣 人士。有人說你xx,你就回 不xx有你嗎?貶義 質疑的組合反擊力是乘積輸出 乙隻魚在遊啊遊 我來分享一些乾貨吧。1.反駁的誤區。1 否定前提,反駁必須正面碰撞。比如,別人說大學生談戀愛會影響學習,導致成績下滑。如果你說,不一定談戀愛會影響學習...