濫用執行緒池引發的問題

2021-08-22 17:57:58 字數 354 閱讀 2937

前不久,由於組內乙個同事濫用執行緒池造成了一起比較嚴重的線上故障。現在記錄一下,防止自己以後犯同樣的錯誤。

a介面是用來返回所有型別的光線資料的同步介面。某種特定的光線x3用了乙個執行緒池(執行緒池裡面有兩個執行緒,將乙個任務拆成兩個來同時進行,等兩個執行緒的任務完成後合併資料並返回),來加快光線x3的生成速度。光線x3的qps不是很大, 但是a介面的qps比較大。然後將用於生成光線x3的執行緒池,應用到了整個a介面上,造成了伺服器雪崩。

如果介面a沒有用到執行緒池,執行介面a邏輯的執行緒都有可能被分到時間片來執行任務(雖然某些請求返回比較慢,但不會卡住其他請求),也就不會這麼容易就造成雪崩。

總結:在併發量大的情況下,不要試圖使用執行緒池來加快單個請求的速度。

由於濫用void 引發的bug

我一向認為在寫 時,void 濫用是有問題的,在最近的一次 中,有類似這樣一段 1 int send void buff,unsigned long size 23 int xx func char buff,unsigned long size 4 int send unsigned char b...

Runtime引發的執行緒問題

以前沒用過在本地執行命令列程式,這次專案中涉及到blast演算法問題,要用到blast演算法本地化命令列指令的呼叫,所以必須得用到runtime,來執行命令列程式,執行這個程式會返回乙個xml檔案,隨後我要對其解析返回結果。然後,每次命令列程式執行完後,去讀其生成的xml檔案,總說找不到,而本地卻已...

執行緒池的建立問題

執行緒池不允許使用executors 去建立,而是通過threadpoolexecutor 的方式,這樣的處理方式讓寫的同學更加明確執行緒池的執行規則,規避資源耗盡的風險。說明 executors 返回的執行緒池物件的弊端如下 1 fixedthreadpool 和singlethreadpool ...