日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何合理的配置线程数?

發(fā)布時(shí)間:2024/8/23 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何合理的配置线程数? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 題記
  • Java并發(fā)編程實(shí)戰(zhàn)
  • 美團(tuán)技術(shù)團(tuán)隊(duì)
  • 追求參數(shù)設(shè)置合理性
  • 線程池參數(shù)動(dòng)態(tài)化

題記

我想不管是在面試中、還是工作中,我們總會(huì)面臨這種問(wèn)題,那么到底有沒(méi)有一種計(jì)算公式去告訴我們?nèi)绾稳ヅ渲媚?#xff1f;

答案是:沒(méi)有

想要合理的配置線程池參數(shù),首先我們需要明白我們的任務(wù)是計(jì)算型還是IO密集型以及和CPU核數(shù)之間的關(guān)系。

Java并發(fā)編程實(shí)戰(zhàn)

該書(shū)中推薦的計(jì)算方式

線程數(shù) = CPU 核心數(shù) *(1+平均等待時(shí)間/平均工作時(shí)間)

我覺(jué)得將這個(gè)公式轉(zhuǎn)換一下更好理解

線程數(shù) = CPU 核心數(shù) *(平均等待時(shí)間 + 平均工作時(shí)間)/ 平均工作時(shí)間)

怎么理解這個(gè)公式,我舉一個(gè)場(chǎng)景

我這有個(gè)索引服務(wù)需要組裝數(shù)據(jù)并錄入到es中,組裝數(shù)據(jù)期間我可能需要去查詢Hbase、Redis等多數(shù)據(jù)源,假設(shè)CPU核心數(shù)為8、查詢Hbase需要2ms、Redis需要2ms,代碼中涉及的一些計(jì)算(邏輯判斷、json轉(zhuǎn)換等)時(shí)間需要2ms,錄入數(shù)據(jù)到ES(期間需要建立連接、數(shù)據(jù)包傳送)需要4ms,套用上面的公式我的平均等待時(shí)間是2ms+2ms+4ms=10ms,平均工作時(shí)間(計(jì)算時(shí)間)2ms,處理一條數(shù)據(jù)花費(fèi)的總時(shí)間為12ms,線程數(shù):8*12/2=48個(gè)線程

上述這種方式太偏理論,但是實(shí)際我們的業(yè)務(wù)需要花費(fèi)的時(shí)間去細(xì)分,這種方式適合用于RPC框架調(diào)用、各個(gè)業(yè)務(wù)邏輯計(jì)算上報(bào)打點(diǎn)并且監(jiān)控到位的情況下我們能確切知道各個(gè)時(shí)間點(diǎn),但是實(shí)際情況很難做到。

美團(tuán)技術(shù)團(tuán)隊(duì)

以下文章摘選自美團(tuán)技術(shù)團(tuán)隊(duì)的博客,看了這么多篇文章,感覺(jué)這里面總結(jié)的是最好的,固記之。

追求參數(shù)設(shè)置合理性

有沒(méi)有一種計(jì)算公式,能夠讓開(kāi)發(fā)同學(xué)很簡(jiǎn)易地計(jì)算出某種場(chǎng)景中的線程池應(yīng)該是什么參數(shù)呢?

帶著這樣的疑問(wèn),我們調(diào)研了業(yè)界的一些線程池參數(shù)配置方案:

調(diào)研了以上業(yè)界方案后,我們并沒(méi)有得出通用的線程池計(jì)算方式。并發(fā)任務(wù)的執(zhí)行情況和任務(wù)類型相關(guān),IO密集型和CPU密集型的任務(wù)運(yùn)行起來(lái)的情況差異非常大,但這種占比是較難合理預(yù)估的,這導(dǎo)致很難有一個(gè)簡(jiǎn)單有效的通用公式幫我們直接計(jì)算出結(jié)果。

線程池參數(shù)動(dòng)態(tài)化

盡管經(jīng)過(guò)謹(jǐn)慎的評(píng)估,仍然不能夠保證一次計(jì)算出來(lái)合適的參數(shù),那么我們是否可以將修改線程池參數(shù)的成本降下來(lái),這樣至少可以發(fā)生故障的時(shí)候可以快速調(diào)整從而縮短故障恢復(fù)的時(shí)間呢?基于這個(gè)思考,我們是否可以將線程池的參數(shù)從代碼中遷移到分布式配置中心上,實(shí)現(xiàn)線程池參數(shù)可動(dòng)態(tài)配置和即時(shí)生效,線程池參數(shù)動(dòng)態(tài)化前后的參數(shù)修改流程對(duì)比如下:


基于以上三個(gè)方向?qū)Ρ?#xff0c;我們可以看出參數(shù)動(dòng)態(tài)化方向簡(jiǎn)單有效。

美團(tuán)還提供了動(dòng)態(tài)配置線程池參數(shù)、監(jiān)控架構(gòu),感興趣同學(xué)可以去仔細(xì)看看。

傳送門(mén):Java線程池實(shí)現(xiàn)原理及其在美團(tuán)業(yè)務(wù)中的實(shí)踐

總結(jié)

以上是生活随笔為你收集整理的如何合理的配置线程数?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。