日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
SpringBoot中線程池的設(shè)置

前言

多線程的設(shè)置是編程比較重要的一環(huán),無(wú)論是工作編程還是面試,是一個(gè)老生常談的話題,多線程一定比單線程跑的快嗎?答案肯定是no,什么時(shí)候使用多線程合適,什么場(chǎng)景下使用?線程池的配置又改怎么配置,本文進(jìn)行一篇總結(jié),歡迎朋友們交流。

10年積累的網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先制作網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有柳州免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

1.一些概念介紹:

1.1計(jì)算機(jī)基礎(chǔ)知識(shí):

計(jì)算機(jī)主要組件衛(wèi)CPU、內(nèi)存、磁盤(pán),三大組件中,CPU的運(yùn)行速率高于內(nèi)存的1000倍以上,內(nèi)存的運(yùn)行速率高于磁盤(pán)1000倍以上。對(duì)比運(yùn)行速率結(jié)果為:CPU>內(nèi)存>磁盤(pán)。

1.2上下文切換:

涉及到上下文切換,單核cpu切換是沒(méi)意義的,多核cpu的切換才能真正的滿足充分利用資源達(dá)到高性能的目的。

1.3線程爭(zhēng)用:

當(dāng)多個(gè)線程執(zhí)行任務(wù)不相同,但是訪問(wèn)資源又相同的時(shí)候,有看呢過(guò)會(huì)引起數(shù)據(jù)問(wèn)題。

1.4并發(fā)執(zhí)行:

可以理解為線程執(zhí)行任務(wù)相同,訪問(wèn)資源相同的時(shí)候觸發(fā)的場(chǎng)景。

1.5 自旋鎖:

很形象的一個(gè)比喻是:沖奶的時(shí)候孩子還在哭,等著媽媽送來(lái)奶瓶和換尿布,直到媽媽處理好所有的事情才算結(jié)束,要不然就是個(gè)一直等待的狀態(tài)。

1.6 互斥鎖:

它跟自旋鎖類(lèi)似,不同的是競(jìng)選失敗線程會(huì)回去睡覺(jué),直到鎖可用來(lái)競(jìng)爭(zhēng)。一直進(jìn)行循環(huán)等。

1.7 樂(lè)觀鎖:

很常見(jiàn)的樂(lè)觀鎖的例子是在數(shù)據(jù)庫(kù)的數(shù)據(jù)操作中,直到提交更新的時(shí)候才給相關(guān)的數(shù)據(jù)行加鎖。

1.8 悲觀鎖:

悲觀鎖就是如果一個(gè)事務(wù)操作用了鎖,那只有當(dāng)這個(gè)事務(wù)把鎖釋放(把媽媽給釋放),其他事務(wù)才能夠執(zhí)行與該鎖沖突的操作。

1.9 時(shí)間片分配算法:

CPU通過(guò)給每個(gè)線程分配CPU時(shí)間來(lái)實(shí)現(xiàn)任務(wù)運(yùn)行,這個(gè)時(shí)間片一般是幾十毫秒。這樣不停地來(lái)回切換任務(wù),運(yùn)行程序,劃分時(shí)間片,就叫做:時(shí)間片分配算法。

2.線程池配置介紹:

因?yàn)榫€程池的設(shè)置肯定是跟著服務(wù)器硬件和業(yè)務(wù)處理走的,所以不通場(chǎng)景下配置是不一樣的。場(chǎng)景假設(shè):

key值 配置值 備注
tasks(系統(tǒng)每秒任務(wù)數(shù))每秒的任務(wù)數(shù),假設(shè)為100~1000 
taskcost(執(zhí)行任務(wù)花的時(shí)間)每個(gè)任務(wù)花費(fèi)時(shí)間,假設(shè)為0.1s 
responsetime (允許響應(yīng)的最大時(shí)間)系統(tǒng)允許容忍的最大響應(yīng)時(shí)間,假設(shè)為1s 

計(jì)算公式:

設(shè)置key值 計(jì)算公式 備注
核心線程數(shù)設(shè)置(corePoolSize)threadcount = tasks/(1/taskcost) =tasks*taskcost = (200~1000)*0.1 = 20~100 個(gè)線程corePoolSize設(shè)置應(yīng)該大于20 根據(jù)8020原則,如果80%的每秒任務(wù)數(shù)小于200,那么corePoolSize設(shè)置為20即可
隊(duì)列數(shù)設(shè)置(queueCapacity)計(jì)算可得 queueCapacity = 20/0.1*1 = 200意思是隊(duì)列里的線程可以等待1s,超過(guò)了的需要新開(kāi)線程來(lái)執(zhí)行 切記不能設(shè)置為Integer.MAX_VALUE,這樣隊(duì)列會(huì)很大,線程數(shù)只會(huì)保持在corePoolSize大小,當(dāng)任務(wù)陡增時(shí),不能新開(kāi)線程來(lái)執(zhí)行,響應(yīng)時(shí)間會(huì)隨之陡增
最大線程數(shù)設(shè)置(maxPoolSize)計(jì)算可得 maxPoolSize = (1000-200)/10 = 80(最大任務(wù)數(shù)-隊(duì)列容量)/每個(gè)線程每秒

3.總結(jié):

多線程的使用場(chǎng)景是多個(gè)任務(wù)執(zhí)行,但是CPU處理時(shí)間不長(zhǎng),占用的時(shí)間片不高,那么多線程會(huì)很大的提升性能,相反,多線程還沒(méi)有單線程快。SpringBoot中比較重要的線程池的概念三個(gè):核心線程數(shù)、隊(duì)列數(shù)、最大線程數(shù)。當(dāng)任務(wù)來(lái)臨的時(shí)候如果corePoolSize 沒(méi)有達(dá)到那么會(huì)創(chuàng)建新的線程執(zhí)行任務(wù)直到corePoolSize 達(dá)到設(shè)定值的時(shí)候開(kāi)始進(jìn)入到隊(duì)列中,隊(duì)列滿了以后開(kāi)始創(chuàng)建新的線程直到最大線程maxPoolSize 的設(shè)置值,全部滿的時(shí)候開(kāi)始執(zhí)行設(shè)置的拒絕策略。


網(wǎng)站標(biāo)題:SpringBoot中線程池的設(shè)置
轉(zhuǎn)載來(lái)于:http://m.5511xx.com/article/dpiigjj.html