青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術博客

感興趣領域:高性能服務器編程,存儲,算法,Linux內核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數據加載中……

同步/異步與阻塞/非阻塞的區別

我喜歡用自己的語言通過聯系現實生活中的一些現象解釋一些概念,當我能做到這一點時,說明我已經理解了這個概念.今天要解釋的概念是:同步/異步與阻塞/非阻塞的區別.

這兩組概念常常讓人迷惑,因為它們都是涉及到IO處理,同時又有著一些相類似的地方.

首先來解釋同步和異步的概念,這兩個概念與消息的通知機制有關.

舉個例子,比如我去銀行辦理業務,可能選擇排隊等候,也可能取一個小紙條上面有我的號碼,等到排到我這一號時由柜臺的人通知我輪到我去辦理業務了.
前者(排隊等候)就是同步等待消息,而后者(等待別人通知)就是異步等待消息.在異步消息處理中,等待消息者(在這個例子中就是等待辦理業務的人)往往注冊一個回調機制,在所等待的事件被觸發時由觸發機制(在這里是柜臺的人)通過某種機制(在這里是寫在小紙條上的號碼)找到等待該事件的人.
而在實際的程序中,同步消息處理就好比簡單的read/write操作,它們需要等待這兩個操作成功才能返回;而異步處理機制就是類似于select/poll之類的多路復用IO操作,當所關注的消息被觸發時,由消息觸發機制通知觸發對消息的處理.

其次再來解釋一下阻塞和非阻塞,這兩個概念與程序等待消息(無所謂同步或者異步)時的狀態有關.
繼續上面的那個例子,不論是排隊還是使用號碼等待通知,如果在這個等待的過程中,等待者除了等待消息之外不能做其它的事情,那么該機制就是阻塞的,表現在程序中,也就是該程序一直阻塞在該函數調用處不能繼續往下執行.相反,有的人喜歡在銀行辦理這些業務的時候一邊打打電話發發短信一邊等待,這樣的狀態就是非阻塞的,因為他(等待者)沒有阻塞在這個消息通知上,而是一邊做自己的事情一邊等待.但是需要注意了,第一種同步非阻塞形式實際上是效率低下的,想象一下你一邊打著電話一邊還需要抬頭看到底隊伍排到你了沒有,如果把打電話和觀察排隊的位置看成是程序的兩個操作的話,這個程序需要在這兩種不同的行為之間來回的切換,效率可想而知是低下的;而后者,異步非阻塞形式卻沒有這樣的問題,因為打電話是你(等待者)的事情,而通知你則是柜臺(消息觸發機制)的事情,程序沒有在兩種不同的操作中來回切換.

很多人會把同步和阻塞混淆,我想是因為很多時候同步操作會以阻塞的形式表現出來,比如很多人會寫阻塞的read/write操作,但是別忘了可以對fd設置O_NONBLOCK標志位,這樣就可以將同步操作變成非阻塞的了;同樣的,很多人也會把異步和非阻塞混淆,因為異步操作一般都不會在真正的IO操作處被阻塞,比如如果用select函數,當select返回可讀時再去read一般都不會被阻塞,就好比當你的號碼排到時一般都是在你之前已經沒有人了,所以你再去柜臺辦理業務就不會被阻塞.

可見,同步/異步與阻塞/非阻塞是兩組不同的概念,它們可以共存組合,也可以參見這里:
http://www.ibm.com/developerworks/cn/linux/l-async/

----------------------------------------- 分割線 ------------------------------------------------------
昨晚寫完這篇文章之后,今早來看了看反饋,同時再自己閱讀了幾遍,發現還是有一些地方解釋的不夠清楚,在這里繼續補充完善一下我的說法,但愿沒有越說越糊涂.

同步和異步:上面提到過,同步和異步僅僅是關于所關注的消息如何通知的機制,而不是處理消息的機制.也就是說,同步的情況下,是由處理消息者自己去等待消息是否被觸發,而異步的情況下是由觸發機制來通知處理消息者,所以在異步機制中,處理消息者和觸發機制之間就需要一個連接的橋梁,在我們舉的例子中這個橋梁就是小紙條上面的號碼,而在select/poll等IO多路復用機制中就是fd,當消息被觸發時,觸發機制通過fd找到處理該fd的處理函數.

請注意理解消息通知和處理消息這兩個概念,這是理解這個問題的關鍵所在.還是回到上面的例子,輪到你辦理業務這個就是你關注的消息,而去辦理業務就是對這個消息的處理,兩者是有區別的.而在真實的IO操作時,所關注的消息就是該fd是否可讀寫,而對消息的處理就是對這個fd進行讀寫.同步/異步僅僅關注的是如何通知消息,它們對如何處理消息并不關心,好比說,銀行的人僅僅通知你輪到你辦理業務了,而如何辦理業務他們是不知道的.

而很多人之所以把同步和阻塞混淆,我想也是因為沒有區分這兩個概念,比如阻塞的read/write操作中,其實是把消息通知和處理消息結合在了一起,在這里所關注的消息就是fd是否可讀/寫,而處理消息則是對fd讀/寫.當我們將這個fd設置為非阻塞的時候,read/write操作就不會在等待消息通知這里阻塞,如果fd不可讀/寫則操作立即返回.

很多人又會問了,異步操作不會是阻塞的吧?已經通知了有消息可以處理了就一定不是阻塞的了吧?
其實異步操作是可以被阻塞住的,只不過通常不是在處理消息時阻塞,而是在等待消息被觸發時被阻塞.比如select函數,假如傳入的最后一個timeout參數為NULL,那么如果所關注的事件沒有一個被觸發,程序就會一直阻塞在這個select調用處.而如果使用異步非阻塞的情況,比如aio_*組的操作,當我發起一個aio_read操作時,函數會馬上返回不會被阻塞,當所關注的事件被觸發時會調用之前注冊的回調函數進行處理,具體可以參見我上面的連接給出的那篇文章.回到上面的例子中,如果在銀行等待辦理業務的人采用的是異步的方式去等待消息被觸發,也就是領了一張小紙條,假如在這段時間里他不能離開銀行做其它的事情,那么很顯然,這個人被阻塞在了這個等待的操作上面;但是呢,這個人突然發覺自己煙癮犯了,需要出去抽根煙,于是他告訴大堂經理說,排到我這個號碼的時候麻煩到外面通知我一下(注冊一個回調函數),那么他就沒有被阻塞在這個等待的操作上面,自然這個就是異步+非阻塞的方式了.




posted on 2009-05-13 22:11 那誰 閱讀(53169) 評論(42)  編輯 收藏 引用 所屬分類: 網絡編程 、服務器設計 、Linux/Unix

評論

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

bu cuo
2009-05-13 22:59 | tiny

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

我這個笨還是想不通

排列等待是等待,也是等別人通知你呀,站在你前面那個人的事辦完了,還不是就通知到你了。

而那個小紙條是通知,也還是等待啊,還不是等一個個人處理完,最后你前一個處理,就輪到你了。

不是一樣?。繘]什么分別呀。只不過人排列的順序變成了號碼排列的順序。
2009-05-13 23:42 | ttplay

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

@ttplay
我的理解是:
同步的時候,不是站在你前面的人通知你,是你自己得看著你前面還有沒有人。
而小紙條就不一樣了,你拿了紙條就不用管了,出去溜達都可以,反正到時候有人會叫你。
2009-05-14 09:12 | Sunshine Alike

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

我覺得IO復用select/epoll那個應該不算異步吧,異步(AIO)是指read/write完成后操作系統會回調用戶空間的指定回調方法,而select/epoll只是一個有事件就緒的通知,沒有這個回調過程,需要你自己主動調用read/write
2009-05-14 09:33 | bachmozart

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

類比很恰當,確實讓我又清晰了不少。
好文,作者好人。
2009-05-14 11:31 | abettor

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

@ttplay
排隊等待是處理消息者自己等待,取小紙條是由別人通知你.
2009-05-14 13:09 | 那誰

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

我的理解:

同步: '你'親自辦這件事
異步: 交代要做的事情,然后忙其他的事情;'別人'(內核)會充當你的跑腿,在條件就緒后將這事辦成,然后通知你(callback);

阻塞: 如果條件未就緒,'你'必須死等它就緒;進程睡眠
非阻塞:如果條件未就緒,'你'可以轉身作別的事情;進程可以作任何想做的事情,不過通常是低效的輪詢。

以這種理解方式,阻塞/非阻塞只對同步操作有意義;異步I/O總是意味著進程不會因為I/O陷入睡眠。

將" select"歸類為異步+blocking不妥,select實際上完成的只是read/write的第一部分:等待條件就緒;唯一的改進是可以等待多個條件。"select + read/write"的調用形式容易產生"系統通知我條件就緒"的假象,可實際上你不過是在條件就緒的時候醒來,然后仍然親自動手完成了數據復制的操作。

依然使用銀行的隱喻:

柜臺R:只能取款
柜臺W:只能存款

read: 親自在柜臺R排隊(進程睡眠) + 取款
write: 親自在柜臺W排隊(進程睡眠) + 存款

select + read/write : 親自同時在R、W兩個柜臺排隊(進程睡眠) + (存款|取款|存款+取款)

AIO : 告訴心腹小弟要取款若干,然后忙別的事情;小弟取款完畢將其如數奉上。

UNP一書中6.2節對I/O模型的分類我覺得很合理:

1).read/write、read + NON_BLOCK、select、signal driven I/O 都屬于同步I/O; 它們的共同特點是:將數據從內核空間復制到到用戶空間的這個操作,是由用戶空間的代碼顯式發起的。

2).只有AIO 屬于 異步I/O;內核不露聲色的將數據從內核空間復制到用戶空間,然后通知進程。










2009-05-14 23:02 | 嘯天豬

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

@嘯天豬
我看了一下你的評論,我想我們之間觀點最大的分歧點在于:

我的觀點是同步/異步僅是消息通知的機制,至于消息到來時如何處理與這兩個概念無關.

而你的觀點則認為,同步/異步不僅僅包括消息通知,還包括了對消息的處理,所以select之類的通知消息的觸發機制你歸類為"同步",而AIO這種俘獲了消息也對消息進行了處理(比如你說的將數據從內核copy到用戶態)的機制才是真正的異步.

也就是說,你上面回復的這句話:
異步: 交代要做的事情,然后忙其他的事情;'別人'(內核)會充當你的跑腿,在條件就緒后將這事辦成,然后通知你(callback);

事實上是我們之間對這個概念認知的最大分歧,你認為異步就是不止通知了消息,還要加上將這件事情辦妥.而我認為,異步僅在于通知這個消息發生了,而具體如何處理該消息不在它關注的范圍之內.

我在寫上上面這段評論的時候也在思考對這個概念的理解,我還是認為我的觀點是正確的,今天太晚了,改天找來UNP詳細看看.
2009-05-14 23:54 | 那誰

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

概念真要理解了,就是一句話可以說透的。
2009-05-15 23:05 | Benjamin

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

@ttplay
在你下面的回復我沒看
我理解的是
拿紙條和 排隊的區別在于
排隊的 必須自己 一直看前面是否有人 沒人就是到自己了
拿紙條的就可以這樣理解
坐在那里愛 干嘛干嘛 等輪到他時 柜臺就給他發個消息 他收到消息就去...
他不用象排隊的一樣
不斷檢測 前面是否有人
2009-08-10 00:19 | 王清

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

同步異步是,一段時間里能不能做多件事情,不能,同步;能,異步。
阻塞非阻塞是,自己等待的那個步驟需要不需要自己去確認,需要則是阻塞,不需要則是非阻塞
2009-11-20 14:03 | wgcno7

# re: 同步/異步與阻塞/非阻塞的區別[未登錄]  回復  更多評論   

@嘯天豬

大哥,你太牛逼了?。?
2009-11-27 13:18 | Squall

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

博主講得好??!~!
2010-01-06 09:17 | Pigsy.Beard

# re: 同步/異步與阻塞/非阻塞的區別[未登錄]  回復  更多評論   

@那誰
select 是同步非阻塞的
2010-10-28 14:38 | 菜鳥

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

這些都和消息機制基本無關
同步異步是就操作發起者是否實際執行者而言的,是自己親自去銀行取錢還是讓小弟幫忙解決

只有異步時才有消息的問題,小弟干完活會向你匯報,同步時你自給自己發消息?。?

阻塞與非阻塞與消息觸發也沒啥關系,阻塞就是不管銀行排多長隊等待直到取出錢,非阻塞則是發現人多可以選擇不取或不在這兒取(拜托不同于發短信打電話。。。。。不能亂寫無用代碼)。

select/poll之類也和所謂消息機制無關,要到很多銀行分別取一些錢,發現哪家銀行人少就去哪家,這顯然是同步的,只是需要做很多事情而不是一件。


2010-11-08 00:01 | yangtou

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

靠,純粹是誤人子弟
select/poll是同步的,你竟然拿來三番五次的作為異步的例子來講
select/poll機制本來就叫多路復用I/O,或者多路同步I/O
2010-12-02 14:57 | z_berry

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

同意@嘯天豬的,select是同步阻塞的
2010-12-10 13:50 | unp

# re: 同步/異步與阻塞/非阻塞的區別[未登錄]  回復  更多評論   

那誰,頂你!寫的真不錯!
2011-02-24 15:42 | rainfish

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

本來還比較清晰,讓這位兄弟這么一說更混了,好像異步和多路I/O復用差的很遠吧,扯不上什么關系吧!
2011-03-04 22:44 | aa

# 請教大家一個網絡客戶端設計問題  回復  更多評論   

我寫一個網絡客戶端sdk,我用的是select多路復用的方式,每一個socket我用一個類封裝起來,用戶發送一個消息就直接調用send發出去,然后數據接收到的時候會調用我類里面的OnRecvData()函數表示數據接收過來了,
但是我的程序的使用者要求要在發送消息后同步獲取返回的數據,這時候最簡單的辦法是設置一個變量,然后輪訓的查消息是否從服務器反饋回來了,但是這樣這樣肯定是弱智的,
那么如何給客戶提供的接口是同步的呢,以下是代碼的描述:


我的網絡程序的內部//////////////////////////////////////////////////////////////

//一個封裝socket的類,select函數返回后會根據不同的socket句柄調用相應的類的接收數據的函數
class Client
{
void OnRecvRead()
{
recv //這里接收數據

//然后這里根據得到的消息調用不通的消息處理函數
switch()
case OnData1Recv()
case OnData2Recv()
case OnData3Recv()
}
//消息1處理函數
void OnData1Recv()
{
//接收到反饋數據1,處理數據1
}
void OnData2Recv()
{
//接收到反饋數據2,處理數據2
}
void OnData3Recv()
{
//接收到反饋數據3,處理數據3
}

SOCKET m_sock;
}

//驅動select的線程
void ThreadStartService()
{
添加多個client(ip,端口對)到FD_SET結構中
發起非阻塞連接

while(1)
{
1:select(....);//循環調用select等待某一個socket可以收消息。
2: 當等待到一個可以讀數據的socket后,根據socket查找對應的Client類,然后調用Client的函數OnRecvRead();
OnRecvRead里面再分析協議,然后調用不同的函數。
}
}


給客戶導出一些函數/////////////////////////////////////////////////////

//啟動驅動select的線程
export InitService()
{
StartThread(ThreadStartService);
}

export ProcessData1()
{
1:發數據1處理一個消息,
2:(如何實現?)這里是關鍵:再這個函數中返回上面“反饋數據1”。
}
export ProcessData2()
{
1:發數據2處理一個消息,
2:(如何實現?)這里是關鍵:再這個函數中返回上面“反饋數據2”。
}
export ProcessData3()
{
1:發數據3處理一個消息,
2:(如何實現?)這里是關鍵:再這個函數中返回上面“反饋數據3”。
}


客戶使用我的庫是先調用InitService,初始化select驅動線程。
可能在任何線程中調用ProcessData1,ProcessData2,ProcessData3,這三個函數。問題是我同步做的很不好。
抱歉寫的比較啰嗦,請高人指點!



2011-03-08 02:12 | 張紀

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

寫的很好!
2011-03-16 17:29 | haodafeng

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

我覺得可以簡單一點理解

1. 同步調用,就是這個調用結束我要知道結果,不管是成功還是失敗

2. 異步調用,就是這個調用結束不需要知道結果,結果稍后通知我(回調通知)

3. 阻塞,就是調用我,調用線程可能會本掛起

4. 非阻塞,就是調用我,調用不會被掛起


2011-03-25 13:03 | hansonl

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

@hansonl ,精辟
2011-03-29 18:16 | 1212

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

@那誰
這篇文章,我同意嘯天豬的概念。
同步異步我認為不是描述消息如何通知,而是兩個動作的處理方式:咱倆并行?還是串行?是順序?還是并發?如果單講IO這一步,就不存在同步異步的問題。
比如我們一般的硬盤是同步IO,在允許讀寫時,cpu要等讀寫完成后,才能做下一件事情,就是串行;而某些SCSI卡自幾有CPU, 如果它肯幫你做讀寫的話,我們的CPU就可以不管讀寫動作是否完成,而直接去做下一件事情了。類型豬說的那個父親讓兒子干活的例子。
2011-04-15 09:42 | 討論

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

阿斯頓撒
2011-07-26 14:25 | 佛擋殺佛

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

高人帖,看帖得回帖呀!不錯,醍醐灌頂
2011-09-01 10:47 | dotnetpig

# re: 同步/異步與阻塞/非阻塞的區別[未登錄]  回復  更多評論   

UNP6.2節,跟lz的理解有所不同的說
2011-10-21 09:53 | xiaok

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

樓主剛好說反了,呵呵
2012-03-03 13:09 | unixlover

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

樓主剛好寫反了,呵呵
2012-03-03 13:11 | unixlover

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

樓主的描述讓我學習到很多,但樓主的觀點我不能完全認同。
就拿樓主的銀行例子來說,

我歸納一下個人的一些觀點,有不當之處希望指正。

1.同步阻塞模式:
a.通過排隊等待辦理業務,等待過程不做任何其他事情,由等待者自己判斷是
否輪到自己。
2.同步非阻塞模式:
a.通過排隊等待辦理業務,等待過程中打電話、聽音樂。
b.通過取號方式等待辦理業務,等待過程中打電話、聽音樂。
3.異步阻塞模式:
a.通過排隊等待辦理業務,在排隊的時候“創造”一個新的人出來,讓這個人
到一邊呆著,不做任何事情。
b.通過取號方式等待辦理業務,在等待的時候“創造”一個新的人出來,讓這
個人到一邊呆著,不做任何事情。
(個人認為:異步阻塞模式沒有任何意義)
4.異步非阻塞模式:
a.通過排隊等待辦理業務,在排隊的時候“創造”一個新的人出來,讓這個人
到一邊打電話、聽音樂。
b.通過取號方式等待辦理業務,在等待的時候“創造”一個新的人出來,讓這
個人到一邊打電話、聽音樂。

所以個人認為:同步和異步的標志是看是否有新的人被“創造”出來。
而阻塞和非阻塞的標志是當同一個人在等待一個事件的時候,是
否可以繼續做其他事情。
2012-05-30 11:30 | QQ:458885028

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

1.同步異步,是相對于你的程序框架設計
2.阻塞和非阻塞,相對于一些函數,如recv或send等

明顯是不同的概念,兩個不同的條件,不能混為一談
2012-06-20 09:59 | QQ:343534594

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

樓主關于select的闡述有些問題,也是與嘯天豬的分歧所在,但是其關于異步/同步,阻塞/非阻塞的觀點很易理解也解釋的很到位。
select稱為“多路復用i/o”,其并不提供將數據從用戶空間搬移到內核空間,或從內核空間搬移到用戶空間的核心功能,因此并不能將其簡單的歸類于異步io、或同步io!其要完成io功能,還需要調用者從此函數成功返回后,再調用read,write,因此可將select 和 此后還需調用的read/write看做一個io整體。若select返回正值,則表示此時有設備準備好可以進行io,此時進行io,肯定不會發生阻塞,這時select+read/write,可整體看做一個同步io;至于阻塞還是非阻塞,主要要看select函數的等待時間值設定,若為null,則是阻塞式的;若為非null,則其為非阻塞的,因為其并不能保證能將數據成功寫入用戶空間或內核空間。select并未設置回調函數,當然不能認為具備異步io功能。
2012-09-26 09:58 | qq 326942298

# re: 343534594   回復  更多評論   

同意你的觀點,但可否稍微詳細點?
對于io而言,其可以分位同步io,異步io,但是這是屬于程序設計的范疇,包括一系列的函數調用,如select,poll,write,read等,并不能簡單的將1個函數歸類于是異步的還是同步的。
而對于單個io函數,則有阻塞、非阻塞之分。
2012-09-26 10:18 | qq 326942298

# re:嘯天豬  回復  更多評論   

更深入的想,嘯天豬的觀點比較合理:
異步同步不是針對單個函數而言的,是針對程序設計而言的。
如果程序設計要求實現異步io,那樓主理解的異步僅僅是消息通知可以進行io,之后就不管io成功與否就是錯誤的了,與程序設計偏離了!
2012-09-26 10:30 | qq 326942298

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

@ttplay

你的理解不對。
假設有10個業務窗口,你在1窗口排隊,那你只能在這慢慢等待輪到自已,這期間你還得慢慢的往前移動(前面有人辦完了),還怕別人插隊,注意力分散,效率低。
而叫號等待就不一樣了,10窗口都有可能叫你,你的等待時間大大縮短,等待的時候還可以看看書,玩玩游戲,效率高。
2012-10-27 15:11 | 直言

# re: 同步/異步與阻塞/非阻塞的區別[未登錄]  回復  更多評論   

同步和異步應該關注的是兩個變化的量的對應關系,在i/o通信中“兩個量”分別指什么?
2013-03-15 20:03 | 長風

# re: 同步/異步與阻塞/非阻塞的區別[未登錄]  回復  更多評論   

表達的不是很清楚
2013-04-10 18:27 | 阿飛

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

select是異步的,但是調用select并不會立刻返回,所以也是阻塞的。
2014-01-15 10:46 | gkpeng

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

好文章!清晰了不少!
2014-02-13 11:10 | jarvis

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

建議不要將句子打的太過長,看不完就忘了。
2014-03-03 14:32 | 周紅

# re: 同步/異步與阻塞/非阻塞的區別  回復  更多評論   

@ttplay
排隊你不能離開隊伍啊,否則就會被要求重新排隊。而拿到號碼的話,可以不用一直處于長長的隊伍當中。就是區別了吧。就像我們在某一網站上注冊時,先填入帳號,再填密碼,再點提交。如果是同步的話,需提交后才知道帳號是否已被注冊,若是異步的話,填完帳號后就可以知道該帳號是否已被注冊了。
2014-09-12 14:09 | 魏萬標

# re: 同步/異步與阻塞/非阻塞的區別[未登錄]  回復  更多評論   

樓主觀點嚴重有誤,一看嘯天豬就是看過UNP.6.2的,不明白的都去看看UNP6.2章節吧,不要在這里模棱兩可了,書中講的很清楚,也非常好理解.看了馬上就懂!
阻塞io/非阻塞io/多路復用io(select,poll,epoll)/信號驅動io,最終都是要用戶進程調用recv來阻塞讀取數據的(無論該過程有多么的短暫),所以都歸屬于posix定義的sync io,async io與syncio的區別就在于用戶進程不需要手動調用recv,kernel就為把數據放到用戶緩沖區了,用戶進程壓根不需要干什么事,這就是主要的區別!

2015-03-10 16:18 | 笨小孩
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            理论片一区二区在线| 欧美激情一区二区三区在线| 亚洲一二三四区| 亚洲免费成人| 欧美喷潮久久久xxxxx| 一区二区三区 在线观看视频| 亚洲精品少妇30p| 国产精品普通话对白| 欧美一区二区三区成人| 久久疯狂做爰流白浆xx| 亚洲国产一区视频| 99综合电影在线视频| 国产偷国产偷亚洲高清97cao| 久久综合狠狠综合久久综合88| 久久综合99re88久久爱| 亚洲视频在线视频| 欧美在线观看视频在线| 亚洲区第一页| 久久久久久91香蕉国产| 女仆av观看一区| 欧美高潮视频| 欧美一区二区三区婷婷月色| 另类图片国产| 欧美日韩一区三区| 国产一区二区三区电影在线观看| 欧美jizzhd精品欧美喷水| 欧美日韩视频免费播放| 欧美专区日韩视频| 欧美精品在线播放| 久久久久久久网站| 欧美日韩在线免费| 男同欧美伦乱| 国产日韩精品一区观看| 亚洲精品欧美日韩| 在线观看欧美日韩| 亚洲欧美一区二区三区在线 | 欧美成人精品h版在线观看| 欧美手机在线视频| 欧美成va人片在线观看| 久久乐国产精品| 亚洲资源av| 欧美成人tv| 免费一级欧美片在线播放| 国产精品网红福利| 亚洲最新在线| 中日韩美女免费视频网址在线观看| 久久久精品动漫| 久久久久国产精品一区| 国产精品久久久久久久第一福利 | 欧美亚洲三级| 欧美体内she精视频| 亚洲人成啪啪网站| 在线观看视频亚洲| 久久久夜色精品亚洲| 久久国内精品自在自线400部| 欧美三级在线视频| 一本久久精品一区二区| 亚洲卡通欧美制服中文| 欧美二区视频| 亚洲激情另类| 中文精品视频一区二区在线观看| 欧美精品久久99| 91久久精品网| 一本不卡影院| 欧美午夜片在线观看| 99国产麻豆精品| 亚洲欧美综合国产精品一区| 国产精品v欧美精品v日韩| 一本大道久久a久久精二百| 一本久道久久久| 国产精品久久久久久久app| 亚洲字幕一区二区| 欧美在线观看视频一区二区三区| 国产欧美综合在线| 久久精品123| 欧美高清在线| 一区二区三区视频在线观看| 国产精品久久久久久av下载红粉| 亚洲男人的天堂在线| 久久久天天操| 亚洲日本一区二区三区| 欧美日韩亚洲综合在线| 午夜久久黄色| 欧美国产日韩一区二区在线观看| 9i看片成人免费高清| 国产精品久久久久久影视| 日韩视频在线永久播放| 欧美激情在线狂野欧美精品| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲精品欧美一区二区三区| 欧美日韩免费观看一区| 亚洲在线网站| 欧美韩日一区二区三区| 亚洲欧美三级伦理| 伊人狠狠色j香婷婷综合| 欧美日韩国产综合一区二区| 午夜久久久久| 亚洲乱码国产乱码精品精| 久久精品国产99| 夜夜嗨av一区二区三区网页 | 欧美剧在线观看| 午夜精彩国产免费不卡不顿大片| 欧美成人四级电影| 亚洲女优在线| 亚洲精品免费观看| 国产麻豆视频精品| 欧美精品18| 久久国产手机看片| 中文国产亚洲喷潮| 欧美激情一区二区久久久| 欧美一区二区三区四区夜夜大片| 91久久久久久国产精品| 国产日韩欧美在线| 欧美三日本三级三级在线播放| 久久久999精品| 亚洲综合色婷婷| 日韩一区二区久久| 欧美二区在线播放| 久久资源av| 久久国产精品久久久| 亚洲一区二区三区激情| 亚洲人成网站777色婷婷| 国产一区二区三区高清| 国产精品一区久久久久| 欧美系列亚洲系列| 欧美连裤袜在线视频| 美女啪啪无遮挡免费久久网站| 午夜精品理论片| 亚洲一区中文字幕在线观看| 亚洲人被黑人高潮完整版| 欧美福利电影在线观看| 裸体素人女欧美日韩| 久久一区二区三区四区五区| 久久精品免费播放| 久久福利一区| 久久久久国产精品厨房| 久久精品国产综合精品| 久久精品国产69国产精品亚洲| 小黄鸭精品密入口导航| 午夜精品久久久久久99热| 亚洲欧美福利一区二区| 亚洲欧美一区二区激情| 欧美一区影院| 久久经典综合| 葵司免费一区二区三区四区五区| 久久久免费精品| 免费不卡欧美自拍视频| 欧美电影在线观看| 亚洲人精品午夜| 一本色道婷婷久久欧美| 亚洲一区二区免费| 欧美在线观看一区| 美女精品在线| 国产欧美日韩中文字幕在线| 欧美日韩免费观看一区| 国产精品yjizz| 国产精品自拍一区| 国产在线精品一区二区中文 | 欧美精品色网| 国产精品免费网站| 国产一区二三区| 亚洲国产精品精华液网站| 亚洲精品影视| 欧美一区二区三区免费大片| 老牛影视一区二区三区| 亚洲国产毛片完整版| 亚洲视频999| 久久久久久91香蕉国产| 欧美日韩一二三区| 黄色一区二区三区| 亚洲精品一品区二品区三品区| 亚洲欧美视频在线| 欧美国产成人精品| 亚洲在线视频一区| 欧美aa在线视频| 国产欧美日本在线| 亚洲精品一区在线| 久久精品国产96久久久香蕉| 91久久亚洲| 久久久99久久精品女同性 | 香蕉成人伊视频在线观看 | 午夜精品视频网站| 欧美精品一区二区三区在线播放 | 久久国产天堂福利天堂| 91久久中文字幕| 久久精品中文字幕一区| 欧美午夜理伦三级在线观看| 一区二区三区中文在线观看 | 欧美风情在线观看| 欧美一级视频精品观看| 欧美视频在线播放| 亚洲国产专区| 巨乳诱惑日韩免费av| av成人老司机| 欧美激情影音先锋| 亚洲国产欧美一区| 久久天堂av综合合色| 午夜国产欧美理论在线播放| 欧美日韩国产经典色站一区二区三区 | 中文日韩电影网站|