同步異步,阻塞非阻塞兩組概念是面試中經(jīng)常遇到的概念蚀同,也是程序員們非常容易混淆的概念矫膨,下面我們來看下兩者的概念和區(qū)別
阻塞和非阻塞針對(duì)的程序執(zhí)行(關(guān)注CPU)時(shí)在等待結(jié)果(返回值痹屹,消息的時(shí)候)對(duì)應(yīng)的操作
1境氢,阻塞指的是在等待調(diào)用結(jié)果的時(shí)候逸嘀,當(dāng)前線程會(huì)一直等待結(jié)果返回才繼續(xù)向下執(zhí)行
2车要,非阻塞指的是等待調(diào)用結(jié)果的時(shí)候,當(dāng)前線程不會(huì)一直等待崭倘,而是繼續(xù)向下執(zhí)行翼岁。
同步和異步針對(duì)的是調(diào)用者(關(guān)注程序之間的通信即網(wǎng)絡(luò))使用的消息通信機(jī)制
3,同步就是調(diào)用發(fā)出之后司光,調(diào)用者選擇對(duì)消息的處理機(jī)制琅坡,收到完成的消息才返回
4,異步就是調(diào)用發(fā)出之后残家,直接返回榆俺,等待消息通知再回來繼續(xù)執(zhí)行
基于以上,就產(chǎn)生了一下幾種I/O模型
1跪削,同步模型之阻塞式IO谴仙, 簡(jiǎn)單易見,程序調(diào)用外部碾盐,CPU是阻塞的晃跺,同時(shí)也要等待消息的返回程序才會(huì),這種模型適用于計(jì)算型的應(yīng)用毫玖。
2掀虎,同步模型值非阻塞IO凌盯,程序調(diào)用外部時(shí),CPU可以不用等待消息返回烹玉,可以繼續(xù)執(zhí)行其他操作驰怎,然后不斷地發(fā)送消息確認(rèn)操作是否完成,知道消息返回或者出錯(cuò)二打。
3县忌,IO多路復(fù)用,程序調(diào)用外部時(shí)继效,會(huì)有額外的監(jiān)視調(diào)用是否就緒症杏,常見的有select, poll瑞信, epoll的方式厉颤,通過這種方式,同一個(gè)進(jìn)程可以同時(shí)處理多個(gè)連接凡简。
4逼友,信號(hào)驅(qū)動(dòng)式I/O 這種不常見,首先我們?cè)试SSocket進(jìn)行信號(hào)驅(qū)動(dòng)IO,并安裝一個(gè)信號(hào)處理函數(shù)秤涩,進(jìn)程繼續(xù)運(yùn)行并不阻塞帜乞。當(dāng)數(shù)據(jù)準(zhǔn)備好時(shí),進(jìn)程會(huì)收到一個(gè)SIGIO信號(hào)筐眷,可以在信號(hào)處理函數(shù)中調(diào)用I/O操作函數(shù)處理數(shù)據(jù)挖函。
5,異步非阻塞IO 對(duì)于調(diào)用時(shí)浊竟,進(jìn)程會(huì)繼續(xù)向下執(zhí)行,不關(guān)心是否返回津畸,而是等待內(nèi)核完成之后通知完成振定。
參考http://www.reibang.com/p/486b0965c296
加qq群獲取源碼:994625692(可以聊天聊地的那種)