關(guān)于網(wǎng)絡(luò)編程的一些概念

剛開(kāi)始接觸網(wǎng)絡(luò)編程的時(shí)候?qū)σ恍┏R?jiàn)的概念常常混淆,究其原因還是沒(méi)有能夠真正理解。隨著實(shí)踐加深,對(duì)概念理解也相對(duì)深一點(diǎn),所以把那些比較容易混淆的概念總結(jié)一下,希望能夠幫助到那些像我之前那樣有同樣疑問(wèn)的朋友。

1.阻塞與非阻塞

阻塞與非阻塞這對(duì)概念應(yīng)該較容易理解,阻塞就是在調(diào)用某些函數(shù)的時(shí)候不會(huì)立即返回,非阻塞就是函數(shù)立即返回,但是用戶所要進(jìn)行的操作可能并沒(méi)有立即完成。

相信大家在剛學(xué)習(xí)網(wǎng)絡(luò)編程的時(shí)候所編寫的小程序基本上都是同步阻塞的形式。阻塞顧名思義就是在進(jìn)行某些操作的時(shí)候卡住了,這里所謂的卡其實(shí)就是用戶調(diào)用一些API,比如srecv的時(shí)候,并不會(huì)立即就返回,而是過(guò)了一會(huì)才返回,是因?yàn)橄到y(tǒng)內(nèi)部在進(jìn)行一些操作,比如以阻塞的形式調(diào)用recv時(shí),其實(shí)系統(tǒng)內(nèi)部就是檢查數(shù)據(jù)接收緩沖區(qū)是否有數(shù)據(jù),如果有就立即讀取并返回,沒(méi)有就一直等待到緩沖區(qū)有數(shù)據(jù)為止,這個(gè)過(guò)程中用戶是不能做其他事情的,這就是阻塞。同樣對(duì)于非阻塞就是在調(diào)用recv的時(shí)候函數(shù)會(huì)立即返回,這個(gè)時(shí)候可能用戶并沒(méi)有讀到任何數(shù)據(jù),有兩種形式去檢查recv是否讀取到數(shù)據(jù),一種是用戶通過(guò)一個(gè)循環(huán)一直循環(huán)檢查recv返回的值是否大于0,這種方式就是同步非阻塞,另一種就是系統(tǒng)在數(shù)據(jù)接收緩沖區(qū)有數(shù)據(jù)后將數(shù)據(jù)寫入用戶緩沖區(qū)然后通過(guò)某種形式通知用戶,這種方式就是異步非阻塞。JAVA中有兩種IO形式,一種是BIO,另一種是NIO,其實(shí)也就是阻塞IO與非阻塞IO兩種形式,相信熟悉JAVA的同學(xué)肯定不陌生。

2.同步與異步

在解釋阻塞與非阻塞的sho已經(jīng)提到了異步與同步的區(qū)別。往往在同步阻塞模式下我們并不能很好地區(qū)分同步與阻塞的區(qū)別。同步異步區(qū)別在于等待消息通知方式上的差別。與阻塞非阻塞是兩種不同的概念,我理解是這是一種被動(dòng)與主動(dòng)的區(qū)別,同步是用戶主動(dòng)去查詢某個(gè)狀態(tài),而異步屬于被動(dòng)的接受系統(tǒng)完成操作通知的一種形式。所以這里也可以看出想要達(dá)到真正的一步是需要操作系統(tǒng)來(lái)支持的。

3.Reactor模式與Proacto模式

Reactor與Proactor應(yīng)該是大家在網(wǎng)絡(luò)編程過(guò)程中總結(jié)出來(lái)的兩種形式罷了。在多路復(fù)用IO網(wǎng)絡(luò)模型編程的時(shí)候經(jīng)常需要進(jìn)行事件分發(fā),所以會(huì)有一個(gè)事件分離器,Reactor與Proactor其實(shí)就是對(duì)應(yīng)不同類型的事件分離器。Reactor主要是講讀寫事件分發(fā)到已注冊(cè)的工作者中,有工作線程負(fù)責(zé)讀取或?qū)懭耄鳳roactor則是由操作系統(tǒng)進(jìn)行相應(yīng)的讀寫操作,然后通知工作線程進(jìn)行下一步動(dòng)作。所以說(shuō)Reactor采用的是同步模式,Proactor采用的是異步模式。

Reactor主要是

4.目前的網(wǎng)絡(luò)模型哪些是真正的異步

目前主要的網(wǎng)絡(luò)編程模型主要有select,epoll,poll,kqueue,IOCP等,另外還有一些開(kāi)源庫(kù),比如Libevent,libuv,libev等,還有比較龐大的ACE其實(shí)都是對(duì)以上幾種模型的一種封裝的形式。真正意義上的異步應(yīng)該就是windows系統(tǒng)提供的IOCP模型,Linux下的epoll通常會(huì)有人會(huì)認(rèn)為是異步網(wǎng)絡(luò)模型,其實(shí)不然,epoll還是需要用戶通過(guò)循環(huán)不斷去檢查文件狀態(tài)的,所以嚴(yán)格來(lái)說(shuō)是一種同步的形式。目前有不少網(wǎng)絡(luò)開(kāi)源第三方庫(kù)通過(guò)模擬的形式提供linux下的異步網(wǎng)絡(luò)模型,其實(shí)基本上都是通過(guò)在某個(gè)線程中將數(shù)據(jù)接收完成再通知另一個(gè)工作線程來(lái)讀取數(shù)據(jù)。真正的異步模型是需要操作系統(tǒng)支持的,Windows提供了這種支持,Linux目前還沒(méi)有,不過(guò)Linux下的epoll模型在有大量連接到情況下性能也是很強(qiáng)的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評(píng)論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 178,980評(píng)論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 64,064評(píng)論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,779評(píng)論 6 414
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 56,109評(píng)論 1 330
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 43,287評(píng)論 0 291
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評(píng)論 1 338
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,515評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,750評(píng)論 1 375
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,933評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 35,327評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 36,667評(píng)論 1 296
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,492評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,703評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容