1. 程式人生 > >一個 CPU 核 開多少個 執行緒 比較合適 ?

一個 CPU 核 開多少個 執行緒 比較合適 ?

一個 CPU 核 開多少個 執行緒 比較合適 ?

 

這是一個 執行緒池 的 問題 。

 

我之前也 反對 過 執行緒池, 因為我認為 執行緒池 影響了 對 使用者 的 實時響應性 。

我也認為, 分時 (對 CPU 資源的分配) 應該由 作業系統 來做就行, 不需要 再 畫蛇添足 。

 

不過, 現在 主流的應用 好像都在用 執行緒池 ,  比如 Asp.net ,對每個請求的處理, 好像是放到 執行緒池 裡執行的, 所以 經常可以看到這樣的現象, Asp.net 裡 處理請求的 執行緒 的 執行緒號 是 重複的,  比如 處理 第一個請求 的 執行緒號 是 2, 處理 第三個請求 的 執行緒號 也是 2 , 處理 第 n 個請求, 第 x, y, z 個請求 的 執行緒號 也是 2  ……  。

所以, 考慮到 建立執行緒 的 效能花費 還是 挺可觀 的, 算了, 還是 隨大流 吧 。 我們也用 執行緒池 。

不過 “建立執行緒 的 效能花費 還是 挺可觀 的”  這是 據說, 我沒有具體去研究過 。

 

我之前寫過一篇文章  《自己實現一個執行緒池》  https://www.cnblogs.com/KSongKing/p/9803935.html ,  可以看看 。

 

接下里進入主題,  一個 CPU 核 開多少個 執行緒 比較合適 ?

 

如果我們寫過 從網頁上抓取內容 的 程式, 就會有一些經驗 :

比如,  當 執行緒 開到 100 個 以上時,  效率 不升反降;  而 100 個執行緒 的 效率 和 60 個執行緒 一樣,  60 個執行緒 和 40 個 也差不多 。

So ……

 

我的 CPU 是 2 核 4 執行緒, 所以這樣評估下來的話,  1 個 核 開 10 ~ 20 個 執行緒  差不多 。

這個 核 沒有算 超執行緒, 超執行緒 大概可以算 半個 核, 大家可以自己評估一下 。  哈哈哈

 

之前在 QQ 群 裡討論相關問題時, 有網友說, “執行緒切換  ……  一個 yield 下來, 就是 15 毫秒(ms) 。”

這個   yield   是什麼意思, 我不知道,  你們去問他吧  ……      哈哈哈哈