日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

輪詢法在混合消息通信中的缺陷

系統(tǒng) 2554 0

消息通信過程可以采取輪詢或者中斷兩種方式,本文嘗試對(duì)輪詢法的一個(gè)缺陷做出分析。

一般輪詢法的框架:

在一般小程序中采取該方法并沒有任何問題,但是,在一個(gè)復(fù)雜系統(tǒng)中擔(dān)負(fù)底層通信任務(wù)的通訊庫(kù)如果設(shè)計(jì)成這種方式,則會(huì)為編程帶來很多困難。

在一個(gè)復(fù)雜系統(tǒng)中,多線程技術(shù)會(huì)被廣泛采用。顯然,上面的循環(huán)遇到某個(gè)消息就處理某個(gè)消息,屬于單線程的工作模式。如何使得上面的程序適合多線程處理呢?可以考慮使用信號(hào)燈。我們將上面接收數(shù)據(jù)的線程成為接收線程,使用數(shù)據(jù)的線程為工作線程。首先工作線程在信號(hào)燈上睡眠等待數(shù)據(jù),接收線程收到數(shù)據(jù)后將數(shù)據(jù)掛入工作線程消息隊(duì)列,然后喚醒工作線程。到目前為止,我們已經(jīng)可以發(fā)現(xiàn) 第一個(gè)問題 了:系統(tǒng)中需要維護(hù)若干信號(hào)燈和若干消息隊(duì)列。這些工作必須由通信庫(kù)使用者來維護(hù)。隨著通信庫(kù)的用戶量越來越大,用戶的維護(hù)開銷也會(huì)越來越大。

關(guān)于第一個(gè)問題,也許還可以茍且忍受。但是,接下來的 第二個(gè)問題 會(huì)讓問題更加復(fù)雜。考慮這樣一種場(chǎng)景:type1和type2兩種消息具有依賴關(guān)系,而某個(gè)功能的實(shí)現(xiàn)需要先接收到type1消息,然后接收到type2消息。我們可以讓實(shí)現(xiàn)次功能的工作線程依次等待兩個(gè)信號(hào)燈即可。但是,如果系統(tǒng)中還存在第三個(gè)線程,它也需要使用type1消息呢?此時(shí)單一的信號(hào)燈已經(jīng)不能解決問題了!當(dāng)type1消息到達(dá)時(shí),type1消息隊(duì)列上的信號(hào)燈是喚醒原來的工作線程呢還是喚醒第三個(gè)線程?這個(gè)問題不解決,要么會(huì)丟包,要么會(huì)讓代碼內(nèi)部邏輯混亂。那么,有補(bǔ)救辦法嗎?有!在上面的消息接收線程中進(jìn)一步細(xì)分消息類型,比如,將type1細(xì)分成type1_for_thread_work, type1_for_thread_third。此時(shí),接收線程趨向于混雜。一旦系統(tǒng)中類似情況很多的時(shí)候,無論是效率還是代碼可維護(hù)性,都會(huì)受到極大挑戰(zhàn)。

解決上面問題的方法有2種:

1、互斥、阻塞地收發(fā)數(shù)據(jù)包

2、采用多端口,不同的while(1){}針對(duì)不同的端口。上層應(yīng)用通過使用不同的端口來避免消息混雜。

下圖描述了單一端口發(fā)存在的問題,以及多端口的優(yōu)勢(shì)。

輪詢法在混合消息通信中的缺陷

輪詢法在混合消息通信中的缺陷


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 东平县| 秀山| 越西县| 巴彦县| 镇宁| 滦平县| 梅河口市| 同心县| 临湘市| 黑龙江省| 通州区| 房产| 琼海市| 阳城县| 大足县| 花莲市| 棋牌| 兴山县| 桦甸市| 习水县| 六枝特区| 宣城市| 昌图县| 商都县| 诸城市| 辉南县| 拉萨市| 乌拉特后旗| 芒康县| 九龙城区| 剑阁县| 城固县| 辽阳县| 舟山市| 台安县| 会理县| 衡水市| 新丰县| 龙井市| 凌海市| 沂水县|