自己做網(wǎng)站的流程谷歌seo網(wǎng)站優(yōu)化
如果任務(wù)過多,隊(duì)列積壓怎么處理?
- 1、內(nèi)存隊(duì)列滿了應(yīng)該怎么辦
- 2、問題要治本——發(fā)短信導(dǎo)致吞吐量降低的問題不能忽略??!
- 3、多路復(fù)用IO模型的核心組件簡介
1、內(nèi)存隊(duì)列滿了應(yīng)該怎么辦
如圖:
大家可以看到,雖然現(xiàn)在發(fā)短信和廣告投遞,彼此之間的執(zhí)行效率不受彼此影響,但是請大家注意,投放廣告之后還要把請求放到內(nèi)存隊(duì)列里面去,而內(nèi)存空間是很有限的,比方說有一個(gè)很熱情的廚師,他強(qiáng)行的把自己做好的菜,往客人嘴里塞,然而作為一個(gè)普通人你的腸胃對食物的消化速度遠(yuǎn)遠(yuǎn)比不了人家做菜的速度,就這樣,你腸胃里的食物,還沒消化完,廚師還是不停的往你嘴里送。
不用多說這樣下去你的腸胃一定會(huì)有問題,那么同理發(fā)短信的速度,遠(yuǎn)遠(yuǎn)比不上商戶們投放廣告速度,內(nèi)存就像人的腸胃樣,是會(huì)被撐爆的,那么如果現(xiàn)在我們沒辦法改變我們腸胃的消化能力,又不想被熱情的廚師做的菜撐爆,那我們最好先客人跟廚師說明,它的飯量大概是多少,當(dāng)廚師發(fā)現(xiàn)你快吃不下的時(shí)候人家廚師或許就放慢做菜速度,乃至停止繼續(xù)做菜了。
內(nèi)存隊(duì)列也是一樣,我們可以通過對發(fā)送短信系統(tǒng)的壓測,評估出一個(gè)對數(shù)據(jù)處理的執(zhí)行效率,從而制定內(nèi)存隊(duì)列的大小,投放廣高系統(tǒng),剛知道隊(duì)列快滿的時(shí)候可以選擇,延緩將數(shù)據(jù)放入隊(duì)列的速度甚至極端情況,就可以將數(shù)據(jù)丟棄,因?yàn)楸緛戆l(fā)短信也不是什么太重要的事情。
2、問題要治本——發(fā)短信導(dǎo)致吞吐量降低的問題不能忽略!!
內(nèi)存被撐爆的問題,算是解決了,但是不是有一種治標(biāo)不治本呢?因?yàn)樽罡镜膯栴}是還是發(fā)送短信的環(huán)節(jié)導(dǎo)致的?我們所謂的調(diào)整內(nèi)存隊(duì)列大小,換句話說就是因?yàn)榘l(fā)送短信的效率低下最終還是影響了系統(tǒng)的吞吐量,是不是很不爽呢?那么你可能會(huì)問了,創(chuàng)建多個(gè)線程,多部署幾臺(tái)與短信運(yùn)營商交互的機(jī)器不就行了嗎?如圖
是的,沒錯(cuò),這樣三個(gè)線程消費(fèi)隊(duì)列中的請求的的確確是加強(qiáng)了消費(fèi)速度,但是還是有令人不舒服的地方:
線程是寶貴的系統(tǒng)資源,確實(shí)不想為發(fā)短信這樣的事情開辟更多資源
單個(gè)線程的利用率還是很低,只要進(jìn)行了短信發(fā)送就意味著這個(gè)線程將被長時(shí)間阻塞,還是沒能解決消費(fèi)過慢的根本原因
以一個(gè)購物狂的生活狀態(tài)為背景,思考如何解決隊(duì)列數(shù)據(jù)消費(fèi)過慢的問題
假如有怎么一個(gè)購物狂,人生最大的快樂就是網(wǎng)購,拆包裹,由于對購物的熱情已達(dá)到一種病態(tài)的程度,以至于當(dāng)他買了一將商品之后,就日日夜夜的在快遞存放點(diǎn)蹲守等著收自己的快遞,直到拿到了才罷休。
我們把這種取快遞的方式如果比作是IO操作的一種方式,那就是阻塞IO了,也就是說我只要調(diào)用了read方法我必須讀取到所要的信息才行,否則我就一直在這里阻塞著。這也是發(fā)短信系統(tǒng)中的線程所采取的IO讀寫方式。
過了幾天,購物狂也明白了,畢竟他還要買買買啊,老在這花大把的時(shí)間干等,也不是一個(gè)事兒,所以他現(xiàn)在稍微理性了些,不管在快遞存放點(diǎn)取沒取到包裹,就會(huì)回去了,但是別忘了拆包裹對他來說也是很重要的一部分。
所以他來往快遞存放點(diǎn)的頻率非常高,快遞還沒有送達(dá),他就來快遞存放點(diǎn)好幾個(gè)來回,這也就表示他空手而歸成了將常便飯,你想每天都要去一個(gè)地方好幾回,而且也都是做的無用功,但這個(gè)過程對購物狂的時(shí)間消耗是實(shí)實(shí)在在的。
像上面這種情況就可以被看做是非阻塞IO的處理方式,當(dāng)你發(fā)起IO請求的時(shí)候&#x