W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
配置 Dubbo 中的線程模型
如果事件處理的邏輯能迅速完成,并且不會(huì)發(fā)起新的 IO 請(qǐng)求,比如只是在內(nèi)存中記個(gè)標(biāo)識(shí),則直接在 IO 線程上處理更快,因?yàn)闇p少了線程池調(diào)度。
但如果事件處理邏輯較慢,或者需要發(fā)起新的 IO 請(qǐng)求,比如需要查詢數(shù)據(jù)庫(kù),則必須派發(fā)到線程池,否則 IO 線程阻塞,將導(dǎo)致不能接收其它請(qǐng)求。
如果用 IO 線程處理事件,又在事件處理過程中發(fā)起新的 IO 請(qǐng)求,比如在連接事件中發(fā)起登錄請(qǐng)求,會(huì)報(bào)“可能引發(fā)死鎖”異常,但不會(huì)真死鎖。
因此,需要通過不同的派發(fā)策略和不同的線程池配置的組合來應(yīng)對(duì)不同的場(chǎng)景:
<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />
Dispatcher
all
?所有消息都派發(fā)到線程池,包括請(qǐng)求,響應(yīng),連接事件,斷開事件,心跳等。direct
?所有消息都不派發(fā)到線程池,全部在 IO 線程上直接執(zhí)行。message
?只有請(qǐng)求響應(yīng)消息派發(fā)到線程池,其它連接斷開事件,心跳等消息,直接在 IO 線程上執(zhí)行。execution
?只有請(qǐng)求消息派發(fā)到線程池,不含響應(yīng),響應(yīng)和其它連接斷開事件,心跳等消息,直接在 IO 線程上執(zhí)行。connection
?在 IO 線程上,將連接斷開事件放入隊(duì)列,有序逐個(gè)執(zhí)行,其它消息派發(fā)到線程池。ThreadPool
fixed
?固定大小線程池,啟動(dòng)時(shí)建立線程,不關(guān)閉,一直持有。(缺省)cached
?緩存線程池,空閑一分鐘自動(dòng)刪除,需要時(shí)重建。limited
?可伸縮線程池,但池中的線程數(shù)只會(huì)增長(zhǎng)不會(huì)收縮。只增長(zhǎng)不收縮的目的是為了避免收縮時(shí)突然來了大流量引起的性能問題。eager
?優(yōu)先創(chuàng)建?Worker
?線程池。在任務(wù)數(shù)量大于?corePoolSize
?但是小于?maximumPoolSize
?時(shí),優(yōu)先創(chuàng)建?Worker
?來處理任務(wù)。當(dāng)任務(wù)數(shù)量大于?maximumPoolSize
?時(shí),將任務(wù)放入阻塞隊(duì)列中。阻塞隊(duì)列充滿時(shí)拋出?RejectedExecutionException
?。(相比于?cached:cached
?在任務(wù)數(shù)量超過?maximumPoolSize
?時(shí)直接拋出異常而不是將任務(wù)放入阻塞隊(duì)列)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: