分享一下最近項(xiàng)目中用到的多線程模型。
10年積累的做網(wǎng)站、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有博興免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
需要實(shí)現(xiàn):根據(jù)租戶填寫的表單,自動(dòng)部署ES集群,提供ES服務(wù)。
基本思路:
就是將一個(gè)事務(wù)生命周期分成不同的階段,每個(gè)階段都是用線程去負(fù)責(zé)執(zhí)行。
目前主要分為四個(gè)階段:事件監(jiān)聽階段,事件提交階段,執(zhí)行器階段,狀態(tài)校驗(yàn)階段
流程圖如下:
線程分類:
A、監(jiān)聽線程
B、工作線程
C、狀態(tài)校驗(yàn)線程
D、執(zhí)行器線程
原理圖簡單介紹:
1、AcceptorThread線程:監(jiān)聽操作對列表,將新產(chǎn)生的事件記錄扔進(jìn)事件分類器,并且同時(shí)往內(nèi)存容器中添加一條記錄。
2、事件分類器:根據(jù)事件的類型,創(chuàng)建不同的工作線程
3、工作線程:工作線程是具體干活的,如負(fù)責(zé)調(diào)用marathon的create接口,刪除接口,停止接口等
4、執(zhí)行器:
A、不斷的監(jiān)聽執(zhí)行容器,有任務(wù)的話,就去執(zhí)行,如停止節(jié)點(diǎn),啟動(dòng)節(jié)點(diǎn),恢復(fù)節(jié)點(diǎn)等操作。
B、更新節(jié)點(diǎn)表的狀態(tài),以及 內(nèi)存緩存容器中節(jié)點(diǎn)的狀態(tài)
5、OptStateThread:監(jiān)聽內(nèi)存緩存容器OptMap,如果有新的事件發(fā)生,根據(jù)類型產(chǎn)生不同的校驗(yàn)線程;
6、校驗(yàn)線程:具體負(fù)責(zé)校驗(yàn)的;根據(jù)校驗(yàn)的結(jié)果來更新集群的狀態(tài)
總結(jié):
A、體現(xiàn)了生產(chǎn)者,消費(fèi)者思想
B、對事件進(jìn)行了分割,各自線程只負(fù)責(zé)自己單獨(dú)的部分。
C、對事務(wù)的生命周期,要學(xué)會進(jìn)行合理的拆分
D、要橫向思維,分階段,分模塊劃分
代碼不是很重要,主要是理解這種設(shè)計(jì)模式,設(shè)計(jì)思路;
其實(shí),可以從Netty的多線程模型中吸取知識,從而應(yīng)用到以后的項(xiàng)目中。