亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 2591 0

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

一般輪詢法的框架:

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

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

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

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

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

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

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

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

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品99一区二区三区 | 不卡福利视频 | 免费黄色在线观看 | 永久黄网站色视频免费观看 | 中文字幕日韩精品麻豆系列 | 国产爱久久久精品 | 特级毛片免费视频观看 | 亚洲综合一区二区精品久久 | 日本吻胸抓胸激烈视频网站 | 成人午夜看片在线观看 | 老司机精品99在线播放 | 亚洲成人在线网站 | 久久综合九色婷婷97 | 久久精品入口麻豆 | 日韩中文在线视频 | 国产福利网站 | se在线播放| 日本1区二区三区公司 | 夜夜撸日日干 | 伊人色播 | 国产尤物福利视频一区二区 | 国产精品久久亚洲不卡动漫 | 亚洲欧美另类图片 | 97av麻豆蜜桃一区二区 | 亚洲欧美另类国产综合 | 一区在线看 | 国产精品久久久久久久久久久威 | 亚洲国产精品成人综合久久久 | 四虎国产精品永久地址51 | 免费大片黄在线观看yw | 亚洲91av| 九九视频免费看 | 婷婷开心中文字幕 | 国产小福利 | 奇米影视77 | 亚洲欧美一区二区三区在线 | 欧美操片在线观看 | 99热人人| 免费看黄色的网站 | 日韩欧美中文字幕出 | 天天操夜夜操免费视频 |