根據CPU核心數確定線程池并發(fā)線程數

目錄

一箱靴、拋出問題

二、分析

三荷愕、實際應用

===========正文分割線=================

一衡怀、拋出問題

關于如何計算并發(fā)線程數,一般分兩派安疗,來自兩本書抛杨,且都是好書,到底哪個是對的荐类?問題追蹤后怖现,整理如下:

第一派:《Java Concurrency in Practice》即《java并發(fā)編程實踐》,如下圖:


如上圖玉罐,在《Java Concurrency in Practice》一書中屈嗤,給出了估算線程池大小的公式:

Nthreads=Ncpu*Ucpu*(1+w/c),其中

Ncpu=CPU核心數

Ucpu=cpu使用率吊输,0~1

W/C=等待時間與計算時間的比率


第二派:《Programming Concurrency on the JVM Mastering》即《Java 虛擬機并發(fā)編程》

線程數=Ncpu/(1-阻塞系數)

二.分析

對于派系一饶号,假設cpu100%運轉,即撇開CPU使用率這個因素璧亚,線程數=Ncpu*(1+w/c)讨韭。

現在假設將派系二的公式等于派系一公式脂信,即Ncpu/(1-阻塞系數)=Ncpu*(1+w/c),===》阻塞系數=w/(w+c)癣蟋,即阻塞系數=阻塞時間/(阻塞時間+計算時間),這個結論在派系二后續(xù)中得到應征狰闪,如下圖:

由此可見疯搅,派系一和派系二其實是一個公式......這樣我就放心了......


三、實際應用

那么實際使用中并發(fā)線程數如何設置呢埋泵?分析如下(我們以派系一公式為例):

Nthreads=Ncpu*(1+w/c)

IO密集型:一般情況下幔欧,如果存在IO罪治,那么肯定w/c>1(阻塞耗時一般都是計算耗時的很多倍),但是需要考慮系統(tǒng)內存有限(每開啟一個線程都需要內存空間),這里需要上服務器測試具體多少個線程數適合(CPU占比礁蔗、線程數觉义、總耗時、內存消耗)浴井。如果不想去測試晒骇,保守點取1即,Nthreads=Ncpu*(1+1)=2Ncpu磺浙。這樣設置一般都OK洪囤。

計算密集型:假設沒有等待w=0,則W/C=0. Nthreads=Ncpu撕氧。

至此結論就是:

IO密集型=2Ncpu(可以測試后自己控制大小瘤缩,2Ncpu一般沒問題)(常出現于線程中:數據庫數據交互、文件上傳下載伦泥、網絡數據傳輸等等)

計算密集型=Ncpu(常出現于線程中:復雜算法)

java中:Ncpu=Runtime.getRuntime().availableProcessors()

=========================此處可略過=============================================

當然派系一種《Java Concurrency in Practice》還有一種說法剥啤,

即對于計算密集型的任務,在擁有N個處理器的系統(tǒng)上奄喂,當線程池的大小為N+1時铐殃,通常能實現最優(yōu)的效率。(即使當計算密集型的線程偶爾由于缺失故障或者其他原因而暫停時跨新,這個額外的線程也能確保CPU的時鐘周期不會被浪費富腊。)

即,計算密集型=Ncpu+1域帐,但是這種做法導致的多一個cpu上下文切換是否值得赘被,這里不考慮。讀者可自己考量肖揣。

======================================================================

四民假、總結

選擇線程池并發(fā)線程數的因素很多:任務類型、內存等線程中使用到所有資源都需要考慮龙优。本文經過對現有文獻的分析論證羊异,得出結論,并給出了實際應用公式彤断,實乃工程師之福利野舶,技術之典范......

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宰衙,隨后出現的幾起案子平道,更是在濱河造成了極大的恐慌,老刑警劉巖供炼,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件一屋,死亡現場離奇詭異窘疮,居然都是意外死亡,警方通過查閱死者的電腦和手機冀墨,發(fā)現死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門闸衫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诽嘉,你說我怎么就攤上這事楚堤。” “怎么了含懊?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵身冬,是天一觀的道長。 經常有香客問我岔乔,道長酥筝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任雏门,我火速辦了婚禮嘿歌,結果婚禮上,老公的妹妹穿的比我還像新娘茁影。我一直安慰自己宙帝,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布募闲。 她就那樣靜靜地躺著步脓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浩螺。 梳的紋絲不亂的頭發(fā)上靴患,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音要出,去河邊找鬼鸳君。 笑死,一個胖子當著我的面吹牛患蹂,可吹牛的內容都是我干的或颊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼传于,長吁一口氣:“原來是場噩夢啊……” “哼囱挑!你這毒婦竟也來了?” 一聲冷哼從身側響起格了,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤看铆,失蹤者是張志新(化名)和其女友劉穎徽鼎,沒想到半個月后盛末,有當地人在樹林里發(fā)現了一具尸體弹惦,經...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年悄但,在試婚紗的時候發(fā)現自己被綠了棠隐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡檐嚣,死狀恐怖助泽,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情嚎京,我是刑警寧澤嗡贺,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站鞍帝,受9級特大地震影響诫睬,放射性物質發(fā)生泄漏。R本人自食惡果不足惜帕涌,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一摄凡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸漾脂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凉唐。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間会涎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工瑞凑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留末秃,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓籽御,卻偏偏與公主長得像练慕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子技掏,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容