圖解|深入理解Linux高性能網(wǎng)絡(luò)架構(gòu)的那些事


1. 落寞的小黑

小黑: 你今天下班挺早呀!
大白: 就咱這覺悟,心里有工作,哪里都是辦公桌,不要拘泥于形式嘛。
大白: 下午去面的哪家?啥崗位?咋樣?
小黑: 是一家做自動(dòng)駕駛的創(chuàng)業(yè)公司,網(wǎng)站是看團(tuán)隊(duì)介紹還不錯(cuò),就去看看了,這次沒咋準(zhǔn)備,很多問題其實(shí)都熟悉,但是回答的不到位。
大白: 哦,明白了,那就是當(dāng)時(shí)理解的不到位,稀里糊涂過去了,現(xiàn)在忽然問起來,想不起重點(diǎn)。
小黑: 差不多吧,問我都做過哪些高性能的網(wǎng)絡(luò)框架模型,也就是IO和事件驅(qū)動(dòng)那一套。

大白:黑哥,你說這個(gè)問題確實(shí)不好回答,全是術(shù)語和略帶歧義的東西,我覺得我們抓住本質(zhì)去闡述就好。
小黑:來,請(qǐng)開始你的表演,我學(xué)習(xí)學(xué)習(xí)。

IO事件和IO復(fù)用 線程模型和事件驅(qū)動(dòng)模型的架構(gòu) 基于事件驅(qū)動(dòng)的Reactor模式詳解 同步IO和異步IO簡介
2. IO事件和IO復(fù)用
2.1 什么是IO事件
IO的本質(zhì)是數(shù)據(jù)的流動(dòng),數(shù)據(jù)可以從網(wǎng)卡到程序內(nèi)存,也可以從程序內(nèi)存寫到網(wǎng)卡,磁盤操作也是如此。
網(wǎng)絡(luò)IO:內(nèi)存和網(wǎng)卡的數(shù)據(jù)交互 文件IO:內(nèi)存和磁盤的數(shù)據(jù)交互

可讀事件 可寫事件 異常事件

2.2 什么是IO復(fù)用


3. 網(wǎng)絡(luò)框架設(shè)計(jì)要素

遠(yuǎn)端的機(jī)器A發(fā)送了一個(gè)HTTP請(qǐng)求到服務(wù)器B,此時(shí)服務(wù)器B網(wǎng)卡接收到數(shù)據(jù)并產(chǎn)生一個(gè)IO可讀事件; 我們以同步IO為例,此時(shí)內(nèi)核將該可讀事件通知到應(yīng)用程序的Listen線程; Listen線程將任務(wù)甩給Handler線程,由Handler將數(shù)據(jù)從內(nèi)核讀緩沖區(qū)拷貝到用戶空間讀緩沖區(qū); 請(qǐng)求數(shù)據(jù)包在應(yīng)用程序內(nèi)部進(jìn)行計(jì)算和處理并封裝響應(yīng)包; Handler線程等待可寫事件的到來; 當(dāng)這個(gè)連接可寫時(shí)將數(shù)據(jù)從用戶態(tài)寫緩沖區(qū)拷貝到內(nèi)核緩沖區(qū),并通過網(wǎng)卡發(fā)送出去;
備注:上述例子是以同步IO為例,并且將線程中的角色分為Listen線程、Handler線程、Worker線程,分別完成不同的工作,后續(xù)會(huì)詳細(xì)展開。
IO事件監(jiān)聽 數(shù)據(jù)拷貝 數(shù)據(jù)處理和計(jì)算

4. 高性能網(wǎng)絡(luò)框架實(shí)踐
4.1 基于線程模型

4.2 基于事件驅(qū)動(dòng)模型

事件驅(qū)動(dòng)編程是一種編程范式,程序的執(zhí)行流由外部事件來決定,它的特點(diǎn)是包含一個(gè)事件循環(huán),當(dāng)外部事件發(fā)生時(shí)使用回調(diào)機(jī)制來觸發(fā)相應(yīng)的處理。

4.3 Reactor反應(yīng)堆模式
核反應(yīng)堆是核電站的心臟 ,它的工作原理是這樣的:原子由原子核與核外電子組成,原子核由質(zhì)子與中子組成。
當(dāng)鈾235的原子核受到外來中子轟擊時(shí),一個(gè)原子核會(huì)吸收一個(gè)中子分裂成兩個(gè)質(zhì)量較小的原子核,同時(shí)放出2-3個(gè)中子。
這裂變產(chǎn)生的中子又去轟擊另外的鈾235原子核,引起新的裂變,如此持續(xù)進(jìn)行就是裂變的鏈?zhǔn)椒磻?yīng)。

5.反應(yīng)堆模式詳解
5.1 反應(yīng)堆模式的本質(zhì)是什么
IO操作:數(shù)據(jù)包的讀取和寫入 CPU操作:數(shù)據(jù)請(qǐng)求的處理和封裝

單Reactor線程 單Reactor線程和線程池 多Reactor線程和線程池

5.2 單Reactor線程模式

5.3 單Reactor線程和線程池模式



5.4 多Reactor線程和線程池模式


5.5 拓展:同步IO和異步IO

6. 小結(jié)
推薦閱讀:
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲取?。?/span>
評(píng)論
圖片
表情
