电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java線程數(shù)究竟設(shè)多少合理

瀏覽:6日期:2022-08-13 18:55:02
需求緣起

Web-Server通常有個(gè)配置,最大工作線程數(shù),后端服務(wù)一般也有個(gè)配置,工作線程池的線程數(shù)量,這個(gè)線程數(shù)的配置不同的業(yè)務(wù)架構(gòu)師有不同的經(jīng)驗(yàn)值,有些業(yè)務(wù)設(shè)置為CPU核數(shù)的2倍,有些業(yè)務(wù)設(shè)置為CPU核數(shù)的8倍,有些業(yè)務(wù)設(shè)置為CPU核數(shù)的32倍。

“工作線程數(shù)”的設(shè)置依據(jù)是什么,到底設(shè)置為多少能夠最大化CPU性能,是本文要討論的問題。

一些共性認(rèn)知

在進(jìn)行進(jìn)一步深入討論之前,先以提問的方式就一些共性認(rèn)知達(dá)成一致。

1、提問:工作線程數(shù)是不是設(shè)置的越大越好?

回答:肯定不是的。

一來服務(wù)器CPU核數(shù)有限,同時(shí)并發(fā)的線程數(shù)是有限的,1核CPU設(shè)置10000個(gè)工作線程沒有意義。 線程切換是有開銷的,如果線程切換過于頻繁,反而會使性能降低。

2、提問:調(diào)用sleep()函數(shù)的時(shí)候,線程是否一直占用CPU?

回答:不占用,等待時(shí)會把CPU讓出來,給其他需要CPU資源的線程使用。

不止調(diào)用sleep()函數(shù),在進(jìn)行一些阻塞調(diào)用,例如網(wǎng)絡(luò)編程中的阻塞accept()【等待客戶端連接】和阻塞recv()【等待下游回包】也不占用CPU資源。

3、提問:如果CPU是單核,設(shè)置多線程有意義么,能提高并發(fā)性能么?

回答:即使是單核,使用多線程也是有意義的。

多線程編碼可以讓我們的服務(wù)/代碼更加清晰,有些IO線程收發(fā)包,有些Worker線程進(jìn)行任務(wù)處理,有些Timeout線程進(jìn)行超時(shí)檢測。

如果有一個(gè)任務(wù)一直占用CPU資源在進(jìn)行計(jì)算,那么此時(shí)增加線程并不能增加并發(fā),例如這樣的一個(gè)代碼:

while(1){ i++; }

該代碼一直不停的占用CPU資源進(jìn)行計(jì)算,會使CPU占用率達(dá)到100%。

通常來說,Worker線程一般不會一直占用CPU進(jìn)行計(jì)算,此時(shí)即使CPU是單核,增加Worker線程也能夠提高并發(fā),因?yàn)檫@個(gè)線程在休息的時(shí)候,其他的線程可以繼續(xù)工作。

常見服務(wù)線程模型

了解常見的服務(wù)線程模型,有助于理解服務(wù)并發(fā)的原理,一般來說互聯(lián)網(wǎng)常見的服務(wù)線程模型有如下兩種:

1. IO線程與工作線程通過隊(duì)列解耦類模型

Java線程數(shù)究竟設(shè)多少合理

如上圖,大部分Web-Server與服務(wù)框架都是使用這樣的一種 IO線程與Worker線程通過隊(duì)列解耦 類線程模型:

有少數(shù)幾個(gè)IO線程監(jiān)聽上游發(fā)過來的請求,并進(jìn)行收發(fā)包(生產(chǎn)者) 有一個(gè)或者多個(gè)任務(wù)隊(duì)列,作為IO線程與Worker線程異步解耦的數(shù)據(jù)傳輸通道(臨界資源) 有多個(gè)工作線程執(zhí)行正真的任務(wù)(消費(fèi)者)

這個(gè)線程模型應(yīng)用很廣,符合大部分場景,這個(gè)線程模型的特點(diǎn)是,工作線程內(nèi)部是同步阻塞執(zhí)行任務(wù)的(回想一下tomcat線程中是怎么執(zhí)行Java程序的,dubbo工作線程中是怎么執(zhí)行任務(wù)的),因此可以通過增加Worker線程數(shù)來增加并發(fā)能力,今天要討論的重點(diǎn)是:“該模型Worker線程數(shù)設(shè)置為多少能達(dá)到最大的并發(fā)”。

2. 純異步線程模型

任何地方都沒有阻塞,這種線程模型只需要設(shè)置很少的線程數(shù)就能夠做到很高的吞吐量,Lighttpd有一種單進(jìn)程單線程模式,并發(fā)處理能力很強(qiáng),就是使用的的這種模型。該模型的缺點(diǎn)是:

如果使用單線程模式,難以利用多CPU多核的優(yōu)勢 程序員更習(xí)慣寫同步代碼,callback的方式對代碼的可讀性有沖擊,對程序員的要求也更高 框架更復(fù)雜,往往需要server端收發(fā)組件,server端隊(duì)列,client端收發(fā)組件,client端隊(duì)列,上下文管理組件,有限狀態(tài)機(jī)組件,超時(shí)管理組件的支持

however,這個(gè)模型不是今天討論的重點(diǎn)。

工作線程的工作模式

了解工作線程的工作模式,對量化分析線程數(shù)的設(shè)置非常有幫助:

Java線程數(shù)究竟設(shè)多少合理

上圖是一個(gè)典型的工作線程的處理過程,從開始處理start到結(jié)束處理end,該任務(wù)的處理共有7個(gè)步驟:

從工作隊(duì)列里拿出任務(wù),進(jìn)行一些本地初始化計(jì)算,例如http協(xié)議分析、參數(shù)解析、參數(shù)校驗(yàn)等 訪問cache拿一些數(shù)據(jù) 拿到cache里的數(shù)據(jù)后,再進(jìn)行一些本地計(jì)算,這些計(jì)算和業(yè)務(wù)邏輯相關(guān) 通過RPC調(diào)用下游service再拿一些數(shù)據(jù),或者讓下游service去處理一些相關(guān)的任務(wù) RPC調(diào)用結(jié)束后,再進(jìn)行一些本地計(jì)算,怎么計(jì)算和業(yè)務(wù)邏輯相關(guān) 訪問DB進(jìn)行一些數(shù)據(jù)操作 操作完數(shù)據(jù)庫之后做一些收尾工作,同樣這些收尾工作也是本地計(jì)算,和業(yè)務(wù)邏輯相關(guān)

分析整個(gè)處理的時(shí)間軸,會發(fā)現(xiàn):

1)其中1,3,5,7步驟中【上圖中粉色時(shí)間軸】,線程進(jìn)行本地業(yè)務(wù)邏輯計(jì)算時(shí)需要占用CPU。2)而2,4,6步驟中【上圖中橙色時(shí)間軸】,訪問cache、service、DB過程中線程處于一個(gè)等待結(jié)果的狀態(tài),不需要占用CPU。

進(jìn)一步的分解,這個(gè)“等待結(jié)果”的時(shí)間共分為三部分:

請求在網(wǎng)絡(luò)上傳輸?shù)较掠蔚腸ache、service、DB。 下游cache、service、DB進(jìn)行任務(wù)處理。 cache、service、DB將報(bào)文在網(wǎng)絡(luò)上傳回工作線程。量化分析并合理設(shè)置工作線程數(shù)

最后一起來回答工作線程數(shù)設(shè)置為多少合理的問題。

通過上面的分析,Worker線程在執(zhí)行的過程中,有一部計(jì)算時(shí)間需要占用CPU,另一部分等待時(shí)間不需要占用CPU,通過量化分析,例如打日志進(jìn)行統(tǒng)計(jì),可以統(tǒng)計(jì)出整個(gè)Worker線程執(zhí)行過程中這兩部分時(shí)間的比例,例如:

時(shí)間軸1,3,5,7【上圖中粉色時(shí)間軸】的計(jì)算執(zhí)行時(shí)間是100ms 。 時(shí)間軸2,4,6【上圖中橙色時(shí)間軸】的等待時(shí)間也是100ms 。

得到的結(jié)果是,這個(gè)線程計(jì)算和等待的時(shí)間是1:1,即有50%的時(shí)間在計(jì)算(占用CPU),50%的時(shí)間在等待(不占用CPU):

假設(shè)此時(shí)是單核,則設(shè)置為2個(gè)工作線程就可以把CPU充分利用起來,讓CPU跑到100% 。 假設(shè)此時(shí)是N核,則設(shè)置為2N個(gè)工作線程就可以把CPU充分利用起來,讓CPU跑到N*100%。結(jié)論

N核服務(wù)器,通過執(zhí)行業(yè)務(wù)的單線程分析出本地計(jì)算時(shí)間為x,等待時(shí)間為y,則工作線程數(shù)(線程池線程數(shù))設(shè)置為 N*(x+y)/x,能讓CPU的利用率最大化。

經(jīng)驗(yàn)

一般來說,非CPU密集型的業(yè)務(wù)(加解密、壓縮解壓縮、搜索排序等業(yè)務(wù)是CPU密集型的業(yè)務(wù)),瓶頸都在后端數(shù)據(jù)庫,本地CPU計(jì)算的時(shí)間很少,所以設(shè)置幾十或者幾百個(gè)工作線程也都是可能的。

以上就是Java線程數(shù)究竟設(shè)多少合理的詳細(xì)內(nèi)容,更多關(guān)于Java線程數(shù)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 金属清洗剂,防锈油,切削液,磨削液-青岛朗力防锈材料有限公司 | 塑钢件_塑钢门窗配件_塑钢配件厂家-文安县启泰金属制品有限公司 深圳南财多媒体有限公司介绍 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 苏州西装定制-西服定制厂家-职业装定制厂家-尺品服饰西装定做公司 | 阳光1号桔柚_无核沃柑_柑橘新品种枝条苗木批发 - 苧金网 | 亮点云建站-网站建设制作平台| 开业庆典_舞龙舞狮_乔迁奠基仪式_开工仪式-神挚龙狮鼓乐文化传媒 | pbt头梳丝_牙刷丝_尼龙毛刷丝_PP塑料纤维合成毛丝定制厂_广州明旺 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 361°官方网站| 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 大鼠骨髓内皮祖细胞-小鼠神经元-无锡欣润生物科技有限公司 | 高铝砖-高铝耐火球-高铝耐火砖生产厂家-价格【荣盛耐材】 | 全自动变压器变比组别测试仪-手持式直流电阻测试仪-上海来扬电气 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 恒温油槽-恒温水槽-低温恒温槽厂家-宁波科麦仪器有限公司 | 德国BOSCH电磁阀-德国HERION电磁阀-JOUCOMATIC电磁阀|乾拓百科 | 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 山楂片_雪花_迷你山楂片_山楂条饼厂家-青州市丰源食品厂 | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 苏州柯瑞德货架-仓库自动化改造解决方案 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 集装箱展厅-住人集装箱住宿|建筑|房屋|集装箱售楼处-山东锐嘉科技工程有限公司 |