關(guān)于muduo你應(yīng)該知道的基本理論

最近在看muduo,其中有些東西相對(duì)來(lái)說(shuō)還是有些生澀。

  • 服務(wù)器模型
  • c/s模型
  • p2p模型
  • 兩種高效的事件處理模式

  • Reactor

Paste_Image.png

Reactor模式是指主線程只負(fù)責(zé)監(jiān)聽(tīng)文件描述符上是不是有事件發(fā)生,有的話就將該事件通知工作線程,除此之外,主線程不需要做其他任何工作,其他的數(shù)據(jù)讀寫(xiě)、邏輯處理等都是在工作線程中完成的。

  • Proactor
Paste_Image.png

Proactor模式與Reactor一樣,都是對(duì)某個(gè)IO事件進(jìn)行通知,不同的是,Proactor模式中主線程不止監(jiān)聽(tīng)文件描述符上的事件是否發(fā)生,還要完成所有的讀寫(xiě)操作,而工作線程要做的只是處理邏輯問(wèn)題。也就是說(shuō),Proactor模式將所有的I/O操作都交給主線程和內(nèi)核來(lái)處理。

  • 兩種高效的并發(fā)模式
    這里的“同步”和“異步”和“IO”的“同步”“異步”是完全不同的概念。在IO模型中,“同步”和“異步”區(qū)分的是內(nèi)核向應(yīng)用程序通知的是何種IO事件(是就緒事件還是完成事件),以及該由誰(shuí)來(lái)完成IO讀寫(xiě)(是應(yīng)用程序還是內(nèi)核)。在并發(fā)模式中,“同步”指的是程序完全按照代碼序列的順序執(zhí)行;“異步”指的是程序的執(zhí)行需要由系統(tǒng)事件來(lái)驅(qū)動(dòng)。常見(jiàn)的系統(tǒng)事件包括中斷、信號(hào)等。
  • 半同步/半異步模式
    • 半同步半異步反應(yīng)堆模式
Paste_Image.png

半同步/半反應(yīng)堆中,異步線程只有一個(gè),即主線程,他負(fù)責(zé)監(jiān)聽(tīng)所有事件,有事件發(fā)生則將事件插入請(qǐng)求隊(duì)列中。工作線程休眠在請(qǐng)求隊(duì)列中,當(dāng)任務(wù)到來(lái)時(shí),通過(guò)競(jìng)爭(zhēng)獲取任務(wù)處理權(quán)

  • 高效的半同步半異步
Paste_Image.png

主線程只管理監(jiān)聽(tīng)socket,連接socket由工作線程來(lái)管理。當(dāng)有新的連接到來(lái)時(shí),主線程就接受之并將新返回的連接socket派發(fā)給某個(gè)工作線程,此后該socket上的任何IO操作都由被選中的工作線程來(lái)處理,直到客戶端關(guān)閉連接。

  • 領(lǐng)導(dǎo)者/追隨者模式
    這是多個(gè)工作線程輪流獲得事件源集合,輪流監(jiān)聽(tīng)、分發(fā)并處理時(shí)間的一種模式。在任意時(shí)間點(diǎn),程序都僅有一個(gè)領(lǐng)導(dǎo)者線程,他負(fù)責(zé)監(jiān)聽(tīng)I(yíng)/O時(shí)間,而其他線程都是他的追隨者,他們休眠在線程池中等待成為新的領(lǐng)導(dǎo)者。當(dāng)前的領(lǐng)導(dǎo)者如果檢測(cè)到I/O時(shí)間,首先從線程池中選出新的領(lǐng)導(dǎo)者線程,然后處理I/O事件。
  • epoll對(duì)文件描述符的操作有兩種 :
  • ET邊沿模式
    當(dāng)往epoll內(nèi)核事件表中注冊(cè)一個(gè)文件描述符上的EPOLLET事件時(shí),epoll將以ET模式來(lái)操作這個(gè)文件描述符。
  • LT電平觸發(fā)
    LT模式是默認(rèn)的工作模式。

對(duì)于采用LT工作模式的文件描述符,當(dāng)epoll_wait檢測(cè)到其上有事件發(fā)生并將此事件通知應(yīng)用程序后,應(yīng)用程序可以不立即處理該事件。當(dāng)應(yīng)用程序下次調(diào)用epoll_wait的時(shí)候,epoll_wait還會(huì)向應(yīng)用程序通知此事件,直到該事件被處理。而對(duì)于采用ET工作模式的文件描述符,當(dāng)epoll_wait檢測(cè)到其上有事件發(fā)生并通知應(yīng)用程序后,應(yīng)用程序必須立即處理該事件,因?yàn)楹罄m(xù)的epoll_wait將不在向應(yīng)用程序通知此事件。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容