最近在看muduo,其中有些東西相對(duì)來(lái)說(shuō)還是有些生澀。
- 服務(wù)器模型
- c/s模型
- p2p模型
兩種高效的事件處理模式
Reactor

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

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)堆模式

半同步/半反應(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)
- 高效的半同步半異步

主線程只管理監(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)用程序通知此事件。