一個 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 是什麼意思, 我不知道, 你們去問他吧 …… 哈哈哈哈