線程池的各種使用場景

(1)高并發、任務執行時間短的業務,線程池線程數可以設置為CPU核數+1,減少線程上下文的切換
(2)并發不高、任務執行時間長的業務要區分開看:

? ? ? ?a)假如是業務時間長集中在IO操作上,也就是IO密集型的任務,因為IO操作并不占用CPU,所以不要讓所有的CPU閑下來,可以加大線程池中的線程數目,讓CPU處理更多的業務
? ? ? ?b)假如是業務時間長集中在計算操作上,也就是計算密集型任務,這個就沒辦法了,和(1)一樣吧,線程池中的線程數設置得少一些,減少線程上下文的切換
(3)并發高、業務執行時間長,解決這種類型任務的關鍵不在于線程池而在于整體架構的設計,看看這些業務里面某些數據是否能做緩存是第一步,增加服務器是第二步,至于線程池的設置,設置參考(2)。最后,業務執行時間長的問題,也可能需要分析一下,看看能不能使用中間件對任務進行拆分和解耦

?

如何來設置
? ? ?需要根據幾個值來決定
? ? ?? ? ?tasks :每秒的任務數,假設為500~1000
? ? ?? ? ?taskcost:每個任務花費時間,假設為0.1s
? ? ?? ? ?responsetime:系統允許容忍的最大響應時間,假設為1s
? ? ?做幾個計算
? ? ?? ? ?corePoolSize = 每秒需要多少個線程處理??
? ? ? ? ? ? ? ?threadcount = tasks/(1/taskcost) =tasks*taskcout = ?(500~1000)*0.1 = 50~100 個線程。corePoolSize設置應該大于50
? ? ?? ? ?? ? ?根據8020原則,如果80%的每秒任務數小于800,那么corePoolSize設置為80即可
? ? ?? ? ?queueCapacity = (coreSizePool/taskcost)*responsetime
? ? ?? ? ?? ? ?計算可得 queueCapacity = 80/0.1*1 = 80。意思是隊列里的線程可以等待1s,超過了的需要新開線程來執行
? ? ?? ? ?? ? ?切記不能設置為Integer.MAX_VALUE,這樣隊列會很大,線程數只會保持在corePoolSize大小,當任務陡增時,不能新開線程來執行,響應時間會隨之陡增。
? ? ?? ? ?maxPoolSize = (max(tasks)- queueCapacity)/(1/taskcost)(最大任務數-隊列容量)/每個線程每秒處理能力 = 最大線程數
? ? ?? ? ?? ? ? 計算可得 maxPoolSize = (1000-80)/10 = 92
? ? ?? ? ?rejectedExecutionHandler:根據具體情況來決定,任務不重要可丟棄,任務重要則要利用一些緩沖機制來處理
? ? ?? ? ?keepAliveTime和allowCoreThreadTimeout:采用默認通常能滿足

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443312.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443312.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443312.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java線程面試題 Top 50

不管你是新程序員還是老手,你一定在面試中遇到過有關線程的問題。Java語言一個重要的特點就是內置了對并發的支持,讓Java大受企業和程序員的歡迎。大多數待遇豐厚的Java開發職位都要求開發者精通多線程技術并且有豐富的Java程序開發、調試、優化經驗&…

深入理解Semaphore

使用 Semaphore是計數信號量。Semaphore管理一系列許可證。每個acquire方法阻塞,直到有一個許可證可以獲得然后拿走一個許可證;每個release方法增加一個許可證,這可能會釋放一個阻塞的acquire方法。然而,其實并沒有實際的許可證這…

【算法系列之四】柱狀圖儲水

題目: 給定一個數組,每個位置的值代表一個高度,那么整個數組可以看做是一個直方圖, 如果把這個直方圖當作容器的話,求這個容器能裝多少水 例如:3,1,2,4 代表第一個位…

鹽城大數據產業園人才公寓_岳西大數據產業園規劃設計暨建筑設計方案公布,搶先一睹效果圖...

近日,岳西縣大數據產業園規劃設計暨建筑設計方案公布。岳西縣大數據產業園項目總占地面積17014.10㎡(約合25.52畝),擬建總建筑面積約為61590.84㎡(地上建筑面積39907.49㎡,地下建筑面積21602.35㎡)。以“科技圓環”為主題,組建出一…

【算法系列之五】對稱二叉樹

給定一個二叉樹,檢查它是否是鏡像對稱的。 例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。 1/ \2 2/ \ / \ 3 4 4 3但是下面這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的: 1/ \2 2\ \3 3 說明: 如果你可以運用遞歸和迭代兩種方法解決這個問題&a…

【算法系列之六】兩整數之和

不使用運算符 和 - ,計算兩整數 a 、b 之和。 示例 1: 輸入: a 1, b 2 輸出: 3示例 2: 輸入: a -2, b 3 輸出: 1 方法一:遞歸 public static int getSum1(int a, int b) {if ((a & b) ! 0) { // 判斷是否有進位return getSum1(a ^ b, (a &…

cuda默認函數與c++沖突_好程序員Python教程系列-第8講:函數和模塊

好程序員Python教程系列-第8講:函數和模塊,在講解本章節的內容之前,我們先來研究一道數學題,請說出下面的方程有多少組正整數解。事實上,上面的問題等同于將8個蘋果分成四組每組至少一個蘋果有多少種方案,所…

【算法系列之七】合并兩個有序鏈表

將兩個有序鏈表合并為一個新的有序鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4/*** Definition for singly-linked list.* public cla…

mfc讓圖片與按鈕一起_對許多張圖片進行批量裁剪,看看我是如何快速做到的

概要:當我們需要對很多圖片進行批量裁剪時,以往的辦法是自己一張一張圖片去操作,非常麻煩。有沒有這樣一個工具,能夠幫我們批量進行處理呢?之前小編在網上找了非常多的軟件,一個一個地安裝試用,…

【算法系列之八】刪除鏈表的倒數第N個節點

給定一個鏈表,刪除鏈表的倒數第 n 個節點,并且返回鏈表的頭結點。 示例: 給定一個鏈表: 1->2->3->4->5, 和 n 2.當刪除了倒數第二個節點后,鏈表變為 1->2->3->5.說明: 給定的 n 保證是有效的…

手寫分頁sql_分頁查詢SQL語句

表結構:DROP TABLE IF EXISTS zhoufoxcn.userlist;CREATE TABLE zhoufoxcn.userlist (UserId int(10) unsigned NOT NULL auto_increment,UserName varchar(45) NOT NULL,Age int(10) unsigned NOT NULL default 10,Sex tinyint(3) unsigned NOT NULL default 1,Ta…

【算法系列之九】合并兩個有序數組

給定兩個有序整數數組 nums1 和 nums2,將 nums2 合并到 nums1 中,使得 num1 成為一個有序數組。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。你可以假設 nums1 有足夠的空間(空間大小大于或等于 m n)來保存 nums2 …

把網卡指定給vm虛擬機_為VMWare虛擬網卡指定靜態的MAC地址

當你把虛擬機移到另一臺主機或在同一臺主機但不同的路徑時,虛擬機的MAC地址將會更改。默認情況下VMWare會保證MAC地址的唯一性卻不保存固定性,在每次開啟虛擬機里的系統時都可能重新分配MAC地址來保證唯一性,若你想保證即使虛擬機被移動后&am…

【算法系列之十】三數之和

給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a b c 0 ?找出所有滿足條件且不重復的三元組。 注意:答案中不可以包含重復的三元組。 例如, 給定數組 nums [-1, 0, 1,…

android 動態獲取全縣_省市縣 ------ 三級滾動(android)

預先加載仿滾輪實現的全部數據mCityPickerView.init(this);③ 點擊響應:ss.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {CityConfig cityConfig new CityConfig.Builder().title("選擇城市")//標題.build();m…

發電廠電氣部分第三版pdf_火力發電廠電氣主接線的特點

根據火力發電廠的容量及其在電力系統中的地位,一般可將火力發電廠分為區域性火力發電廠和地方性火力發電廠。這兩類火力發電廠的電氣主接線有各自的特點。一、區域性火力發電廠的電氣主接線1、單機容量及總裝機容量都較大單機容量多為300MW、600MW和少量1000MW,電廠…

【算法系列之十一】k個一組翻轉鏈表

給出一個鏈表,每 k 個節點一組進行翻轉,并返回翻轉后的鏈表。 k 是一個正整數,它的值小于或等于鏈表的長度。如果節點總數不是 k 的整數倍,那么將最后剩余節點保持原有順序。 示例 : 給定這個鏈表:1->2->3-&g…

ghostblog主題_讀Ghost博客源碼與自定義Ghost博客主題

我使用的Ghost博客一直使用者默認的Casper主題。我向來沒怎么打理過自己博客,一方面認為自己不夠專業,很難寫出質量比較高的文字;另一方面認為博客太耗時間,很容易影響正常的工作內容。最近公司即將搬遷,我的開發工作也…

【算法系列之十二】最接近的三數之和

給定一個包括 n 個整數的數組 nums 和 一個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。 例如,給定數組 nums [-1,2,1,-4], 和 target 1…

定義一個dto對象_業務代碼的救星——Java 對象轉換框架 MapStruct 妙用

在業務項目的開發中,我們經常需要將 Java 對象進行轉換,比如從將外部微服務得到的對象轉換為本域的業務對象 domainobject,將 domainobject 轉為數據持久層的 dataobject,將 domainobject 轉換為 DTO 以便返回給外部調用方等。在轉…