一、傳統(tǒng)并發(fā)模型的缺點(diǎn)
基于線程的并發(fā)
特點(diǎn):每任務(wù)一線程直線式的編程使用資源昂高,context切換代價(jià)高,競(jìng)爭(zhēng)鎖昂貴太多線程可能導(dǎo)致吞吐量下降蜡感,響應(yīng)時(shí)間暴漲。
基于事件的并發(fā)模型
特點(diǎn):?jiǎn)尉€程處理事件每個(gè)并發(fā)流實(shí)現(xiàn)為一個(gè)有限狀態(tài)機(jī)應(yīng)用直接控制并發(fā)負(fù)載增加的時(shí)候恃泪,吞吐量飽和響應(yīng)時(shí)間線性增長(zhǎng)
二郑兴、SEDA架構(gòu)
特點(diǎn):(1)服務(wù)通過(guò)queue分解成stage: 每個(gè)stage代表FSM的一個(gè)狀態(tài)集合 Queue引入了控制邊界(2)使用線程池驅(qū)動(dòng)stage的運(yùn)行: 將事件處理同線程的創(chuàng)建和調(diào)度分離 Stage可以順序或者并行執(zhí)行 Stage可能在內(nèi)部阻塞,給阻塞的stage分配較少的線程
1贝乎、Stage-可靠構(gòu)建的基礎(chǔ)
(1)應(yīng)用邏輯封裝到Event Handler 接收到許多事件情连,處理這些事件,然后派發(fā)事件加入其他Stage的queue 對(duì)queue和threads沒(méi)有直接控制 Event queue吸納過(guò)量的負(fù)載览效,有限的線程池維持并發(fā)(2)Stage控制器 負(fù)責(zé)資源的分配和調(diào)度 控制派發(fā)給Event Handler的事件的數(shù)量和順序 Event Handler可能在內(nèi)部丟棄却舀、過(guò)濾虫几、重排序事件。2挽拔、應(yīng)用=Stage網(wǎng)絡(luò) (1)有限隊(duì)列 入隊(duì)可能失敗辆脸,如果隊(duì)列拒絕新項(xiàng)的話 阻塞在滿溢的隊(duì)列上來(lái)實(shí)現(xiàn)吸納壓力 通過(guò)丟棄事件來(lái)降低負(fù)載 (2) 隊(duì)列將Stage的執(zhí)行分解 引入了顯式的控制邊界 提供了隔離、模塊化螃诅、獨(dú)立的負(fù)載管理 (3)方便調(diào)試和profile 事件的投遞可顯 時(shí)間流可跟蹤 通過(guò)監(jiān)測(cè)queue的長(zhǎng)度發(fā)現(xiàn)系統(tǒng)瓶頸3啡氢、動(dòng)態(tài)資源控制器(1)、線程池管理器目標(biāo): 決定Stage合理的并發(fā)程度操作:觀察queue長(zhǎng)度术裸,如果超過(guò)閥值就添加線程移除空閑線程
(2)倘是、批量管理器目的:低響應(yīng)時(shí)間和高吞吐量的調(diào)度操作:Batching因子:Stage一次處理的消息數(shù)量小的batching因子:低響應(yīng)時(shí)間大的batching因子:高吞吐量嘗試找到具有穩(wěn)定吞吐量的最小的batching因子觀察stage的事件流出率當(dāng)吞吐量高的時(shí)候降低batching因子,低的時(shí)候增加
三袭艺、小結(jié) SEDA主要還是為了解決傳統(tǒng)并發(fā)模型的缺點(diǎn)搀崭,通過(guò)將服務(wù)器的處理劃分各個(gè)Stage,利用queue連接起來(lái)形成一個(gè)pipeline的處理鏈猾编,并且在Stage中利用控制器進(jìn)行資源的調(diào)控门坷。資源的調(diào)度依據(jù)運(yùn)行時(shí)的狀態(tài)監(jiān)視的數(shù)據(jù)來(lái)進(jìn)行,從而形成一種反應(yīng)控制的機(jī)制袍镀,而stage的劃分也簡(jiǎn)化了編程,并且通過(guò)queue和每個(gè)stage的線程池來(lái)分擔(dān)高并發(fā)請(qǐng)求并保持吞吐量和響應(yīng)時(shí)間的平衡冻晤。簡(jiǎn)單來(lái)說(shuō)苇羡,我看中的是服務(wù)器模型的清晰劃分以及反應(yīng)控制。
因在閱讀的過(guò)程中感覺(jué)非常好鼻弧,所以轉(zhuǎn)載該文章设江,轉(zhuǎn)自莊周蝶夢(mèng)