如今,通過線程池最大程度利用CPU的多核性能是十分常見的基礎(chǔ)操作。與此同時線程池的優(yōu)勢是顯而易見的,它可以降低系統(tǒng)資源消耗,提高系統(tǒng)響應(yīng)速度,方便線程并發(fā)數(shù)的管控等等。那么線程池的實現(xiàn)是怎么樣的呢?本文將帶大家分析線程池的具體業(yè)務(wù)場景,現(xiàn)在讓我們開始吧~
一、業(yè)務(wù)場景
快速響應(yīng)用戶請求是線程池十分常見的業(yè)務(wù)場景。具體來講就是用戶發(fā)起的實時請求,服務(wù)追求響應(yīng)時間。比如說用戶要查看一個商品的信息,那么我們需要將商品維度的一系列信息如商品的價格、優(yōu)惠、庫存、圖片等等聚合起來,展示給用戶。
除此之外,快速處理批量任務(wù)也是我們會遇到的業(yè)務(wù)場景。離線的大量計算任務(wù),需要快速執(zhí)行。比如說,統(tǒng)計某個報表,需要計算出全國各個門店中有哪些商品有某種屬性,用于后續(xù)營銷策略的分析,那么我們需要查詢?nèi)珖虚T店中的所有商品,并且記錄具有某屬性的商品,然后快速生成報表。
二、使用分析
針對快速響應(yīng)用戶請求的業(yè)務(wù)場景,我們應(yīng)該從用戶體驗角度看,這個結(jié)果響應(yīng)的越快越好,如果一個頁面半天都刷不出,用戶可能就放棄查看這個商品了。而面向用戶的功能聚合通常非常復(fù)雜,伴隨著調(diào)用與調(diào)用之間的級聯(lián)、多級級聯(lián)等情況,業(yè)務(wù)開發(fā)同學(xué)往往會選擇使用線程池這種簡單的方式,將調(diào)用封裝成任務(wù)并行的執(zhí)行,縮短總體響應(yīng)時間。另外,使用線程池也是有考量的,這種場景最重要的就是獲取最大的響應(yīng)速度去滿足用戶,所以應(yīng)該不設(shè)置隊列去緩沖并發(fā)任務(wù),調(diào)高corePoolSize和maxPoolSize去盡可能創(chuàng)造多的線程快速執(zhí)行任務(wù)。
至于快速處理批量任務(wù),這種場景需要執(zhí)行大量的任務(wù),我們也會希望任務(wù)執(zhí)行的越快越好。這種情況下,也應(yīng)該使用多線程策略,并行計算。但與響應(yīng)速度優(yōu)先的場景區(qū)別在于,這類場景任務(wù)量巨大,并不需要瞬時的完成,而是關(guān)注如何使用有限的資源,盡可能在單位時間內(nèi)處理更多的任務(wù),也就是吞吐量優(yōu)先的問題。所以應(yīng)該設(shè)置隊列去緩沖并發(fā)任務(wù),調(diào)整合適的corePoolSize去設(shè)置處理任務(wù)的線程數(shù)。在這里,設(shè)置的線程數(shù)過多可能還會引發(fā)線程上下文切換頻繁的問題,也會降低處理任務(wù)的速度,降低吞吐量。
以上就是長沙一度軟件培訓(xùn)java培訓(xùn)機構(gòu)的小編針對“Java項目實戰(zhàn)教程之線程池的具體業(yè)務(wù)場景”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。