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

Creative Commons License
本Blog采用 知識(shí)共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議 進(jìn)行許可。 —— Fox <游戲人生>

游戲人生

游戲人生 != ( 人生 == 游戲 )
站點(diǎn)遷移至:http://www.yulefox.com。請(qǐng)訂閱本博的朋友將RSS修改為http://feeds.feedburner.com/yulefox
posts - 62, comments - 508, trackbacks - 0, articles - 7

網(wǎng)絡(luò)編程學(xué)習(xí)和實(shí)踐的過(guò)程中,同步(synchronous)/異步(asynchronous)阻塞(blocking)/非阻塞(non-blocking)總是會(huì)迷惑很多人。依然記得我半年之前在記述IOCP時(shí),一句不經(jīng)意的“非阻塞I/O則是致力于提供高效的異步I/O”便引來(lái)一番口水論爭(zhēng)。

今天在查一些資料的時(shí)候,看到關(guān)于這幾個(gè)詞的論辯竟不是一般的多,細(xì)細(xì)想來(lái),這個(gè)問(wèn)題似乎也確實(shí)有解釋的必要,不在于爭(zhēng)論對(duì)錯(cuò),而在于辨明是非。

討論之前,先限定討論的范圍:此處之同步/異步僅限于I/O操作,與OS所討論的進(jìn)程/線程中的其他同步/異步沒(méi)有直接關(guān)系;討論的內(nèi)容是:兩對(duì)相似的術(shù)語(yǔ)之間的區(qū)別到底有多大

  • 非常大:

Douglas C. Schmidt在《C++網(wǎng)絡(luò)編程》中這樣說(shuō)到:

They are very different, as follows:

AIO is "asynchronous I/O", i.e., the operation is invoked asynchronously and control returns to the client while the OS kernel processes the I/O request.  When the operation completes there is some mechanism for the client to retrieve the results.

Non-blocking I/O tries an operation (such as a read() or write()) and if it the operation would block (e.g., due to flow control on a TCP connection or due to lack of data in a socket), the call returns -1 and sets errno to EWOULDBLOCK.

翻譯如下:

:例如,操作被異步調(diào)用時(shí),控制權(quán)交給客戶端,I/O操作請(qǐng)求則交由操作系統(tǒng)內(nèi)核處理,當(dāng)操作完成后,通過(guò)某種機(jī)制將結(jié)果通知客戶端。

非阻塞I/O:嘗試調(diào)用某操作,如果操作被阻塞,則調(diào)用返回-1并置錯(cuò)誤值為EWOULDBLOCK。

從這兩段“very different”的解釋來(lái)看,我的感覺(jué)是并沒(méi)有指出二者的區(qū)別,因?yàn)槲覀儫o(wú)法確定所謂AIO是如何處理的,如果AIO直接“調(diào)用返回-1并置錯(cuò)誤值為EWOULDBLOCK”,實(shí)現(xiàn)“控制權(quán)交給客戶端”,似乎并無(wú)任何不妥。況且,對(duì)于非阻塞I/O,我們也需要“當(dāng)操作完成后,通過(guò)某種機(jī)制將結(jié)果通知客戶端”這樣的處理。

  • 無(wú)差別:

而在Wikipedia上則直接等同二者:Asynchronous I/O, or non-blocking I/O, is a form of input/output processing that permits other processing to continue before the transmission has finished.

當(dāng)然,對(duì)于recv和send,我們一般會(huì)說(shuō)他們是阻塞起的,而不會(huì)說(shuō)他們是同步起的,但這顯然不是二者的區(qū)別,因?yàn)槲覀兌贾溃?strong>阻塞的原因正是等待同步結(jié)果的返回。

因此,二者的區(qū)別在于,阻塞/非阻塞是表現(xiàn),同步/異步是原因,我們說(shuō)某某操作是阻塞起的,或者某某線程是阻塞起的,是因?yàn)樵诘却僮鹘Y(jié)果的同步返回;我們說(shuō)某某操作是非阻塞的,是因?yàn)椴僮鹘Y(jié)果會(huì)通過(guò)異步方式返回。

討論到這兒,再咬文嚼字的爭(zhēng)辯下去似乎已經(jīng)沒(méi)有任何實(shí)際意義。

------------------------------------------------------------

PS:糾結(jié)一些必要的概念是為了加深理解,太過(guò)糾結(jié)了反倒會(huì)滯塞理解。我之前對(duì)于其概念也并非特別清楚,所以才會(huì)再續(xù)一篇特意言明,也算彌補(bǔ)一下自己的過(guò)失。

Feedback

# re: 再辨同步/異步與阻塞/非阻塞[未登錄](méi)  回復(fù)  更多評(píng)論   

2008-09-11 13:17 by Alex
TKS,加強(qiáng)理解

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2008-09-11 14:29 by k120

SELECT 是用于檢查SOCKET上有無(wú)可讀/可寫(xiě)數(shù)據(jù),是非阻塞的,但是是同步的。

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2008-09-11 14:47 by Fox
select在等待時(shí)間timeout>0的情況下是阻塞的,這時(shí)才有你所說(shuō)的同步。
如果timeout==0,才是非阻塞的,有無(wú)數(shù)據(jù)都是立即返回,自然沒(méi)有同步問(wèn)題。

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2008-09-11 17:59 by LOGOS
如果你是指將控制權(quán)交給客戶端,那么異步和非阻塞沒(méi)什么差別
但是非阻塞的東西不一定會(huì)給你回調(diào)通知,而異步則一定會(huì)
我覺(jué)得這兩個(gè)詞不是用來(lái)描述同樣的事情的

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2008-09-12 09:24 by Fox
@LOGOS
你說(shuō)的對(duì),但如果說(shuō)“非阻塞的東西不一定會(huì)給你回調(diào)通知”,那么這時(shí)候在所阻塞和非阻塞也就沒(méi)有意義了,既然不需要回調(diào)/事件通知或其他任何形式的回饋,也就沒(méi)有阻塞的意義了,就是普通調(diào)用,無(wú)所謂阻塞不阻塞了,對(duì)吧?

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2008-09-23 15:20 by sl
I don't know what you are talking about. Douglas had a very clear description about it: they are different.

How can you explain that a nonblocking reading from a file descriptor will return immediately, but there is no async processing if without a proper configuring. Fox, it does make sense when you wanna polling data from the descriptor.

Hi, buddy, Do some experiments, use fcntl() and some multi-threads or multi-proess tech. you will understand what differents are there.


to specify nonblocking I/O
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Use the F_SETFL command with fcntl and enable the O_NONBLOCK file flag.


to specify AIO:
~~~~~~~~~~~~~~~~
Use the F_SETFL command with fcntl and enable the O_ASYNC file flag.


To receive the SIGIO signal, we need to perform three steps.

1. Establish a signal handler for SIGIO, by calling either signal or sigaction.
2. Set the process ID or process group ID to receive the signal for the descriptor, by calling fcntl with a command of F_SETOWN (Section 3.14).
3. Enable asynchronous I/O on the descriptor by calling fcntl with a command of F_SETFL to set the O_ASYNC file status flag (Figure 3.9).

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2008-09-23 16:12 by Fox
@sl
我在上面提到“我們說(shuō)某某操作是非阻塞的,是因?yàn)椴僮鹘Y(jié)果會(huì)通過(guò)異步方式返回”,Douglas說(shuō)的是there is no async processing if without a proper configuring,意思是:

非阻塞之后可以不做異步處理。

但非阻塞和異步仍然是緊密聯(lián)系而非區(qū)別非常大。
Douglas這本書(shū)我手頭現(xiàn)在沒(méi)有:(,翻了一下adv. pro. in UNIX,沒(méi)有看到詳細(xì)說(shuō)明:(。

# re: 再辨同步/異步與阻塞/非阻塞[未登錄](méi)  回復(fù)  更多評(píng)論   

2008-09-23 16:45 by Xw.Y
作為一個(gè)不懂網(wǎng)絡(luò)編程,僅看了此片博文和之后評(píng)論的人,一下是我的理解:

1. AIO是對(duì)于某個(gè)操作的定義,我們可以說(shuō)某個(gè)函數(shù)是同步操作,或者某個(gè)函數(shù)是異步操作。
2. non-blocking是對(duì)于某個(gè)操作結(jié)果的定義,我們可以說(shuō)某一個(gè)函數(shù)(比如read)是non-blocking的,如果這個(gè)函數(shù)立即返回并且得到正常調(diào)用結(jié)果。對(duì)于同樣一個(gè)函數(shù)如果返回了一個(gè)block的標(biāo)記,那么它就是blocking的調(diào)用。

在博主的引用和sl評(píng)論的引用中似乎都很肯定的說(shuō),
”AIO和non-blocking是完全同的兩件事!“

哇哈哈,大家來(lái)砸我吧~
(此人不懂網(wǎng)絡(luò)編程)

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2008-12-08 14:50 by yqf
我認(rèn)為,首先要明白這些概念所描述的對(duì)象。在此可以理解為應(yīng)用進(jìn)程、內(nèi)核進(jìn)程以及IO,異步/同步描述的是前兩個(gè)在不同情況下的關(guān)系,non-blocking/blocking描述的是后兩個(gè)之間的不同處理,可以做不同組合
非阻塞之后可以不做異步處理,非常有道理,這實(shí)際上和同步非阻塞處理事物沒(méi)有區(qū)別

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2009-01-01 16:27 by 葉先生
“阻塞/非阻塞是表現(xiàn),同步/異步是原因”,這句總結(jié)得非常好。我同意
“我們說(shuō)某某操作是非阻塞的,是因?yàn)椴僮鹘Y(jié)果會(huì)通過(guò)異步方式返回”這句說(shuō)得有點(diǎn)片面。因?yàn)榇嬖诹硪环N情況:如果某個(gè)函數(shù)表現(xiàn)為非阻塞,但他卻可能是同步的。“k120”回復(fù)中有提到這種情況,下面我也會(huì)舉例子。

一個(gè)函數(shù)要么是同步要么是異步的,但是同步函數(shù)會(huì)引發(fā)兩種不同的表現(xiàn)。1:阻塞,在從此函數(shù)返回之前,當(dāng)前線程不能響應(yīng)其他消息。2:非阻塞,雖然還沒(méi)有從函數(shù)中返回,但是卻可以響應(yīng)其他消息。

但是異步函數(shù)卻只有一種表現(xiàn),那就是非阻塞。

以下兩個(gè)函數(shù)都是同步的,即是不做完事情不出返回。但卻是兩種表現(xiàn),test1在沒(méi)有返回之前,界面是不會(huì)響應(yīng)消息的,這就叫阻塞,你試著拖動(dòng)一下窗體,會(huì)沒(méi)有反應(yīng),像死機(jī)一樣的。test2也是同步的,不做完事不返回的,但是你卻可以拖動(dòng)窗體,窗體會(huì)重繪,這叫非阻塞。

C#代碼:
做一個(gè)C# WinForms的工程,在兩個(gè)按鈕事件中分別調(diào)用下面兩個(gè)不同的函數(shù)。
void test1()//同步函數(shù),會(huì)阻塞線程
{
for(long i=0;i<99999999999;i++)
{
//什么也不做,i值到了999999999之后才返回
}
}
----------------------------------------
void test2()//同步函數(shù),不會(huì)阻塞線程
{
for(long i=0;i<99999999999;i++)
{
Application.DoEvent();//C++程序員說(shuō)這是“消息泵”
//和上面那函數(shù)一樣,只是多了這一句而已。這句有魔術(shù)作用。有“中斷”的效
果,會(huì)檢查消息隊(duì)列有無(wú)要處理的消息,有就會(huì)跑去執(zhí)行隊(duì)列中的消息響應(yīng)函
數(shù),執(zhí)行完后又跑回這里來(lái)。
}
}

異步函數(shù)我就一下子舉不出例子了,異步就是即時(shí)返回,執(zhí)行結(jié)果通過(guò)回調(diào),消息之類的去通知調(diào)用者,因?yàn)槭羌磿r(shí)返回,想阻塞都阻塞不了。
理解這幾個(gè)詞還是從他們的詞性,所描述的對(duì)象出發(fā)。
這是我個(gè)人的理解,如有錯(cuò)誤,敬請(qǐng)具體地指錯(cuò)在哪句。

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2009-01-02 13:38 by Fox
@葉先生
你給的第一個(gè)的例子并不太合適,阻塞實(shí)際是指因繼續(xù)執(zhí)行的條件不滿足(事件未到達(dá))而掛起等待,test1實(shí)際并未掛起,只是一直在執(zhí)行一個(gè)空循環(huán)而已。
test2只是 多了一個(gè)DoEvent,如果討論同步還是異步,實(shí)際要視DoEvent而定,若DoEvent像你所說(shuō),那可以作為異步看待,如果DoEvent阻塞等待事件到來(lái),則成了同步,但這都與你給的循環(huán)沒(méi)有關(guān)系。

至于你說(shuō)test1會(huì)“卡死”,那是因?yàn)閱尉€程的話,需要不停的執(zhí)行循環(huán),但沒(méi)有阻塞,因?yàn)檠h(huán)一直在跑:)

# re: 再辨同步/異步與阻塞/非阻塞  回復(fù)  更多評(píng)論   

2012-04-12 17:26 by 孫永杰
"沒(méi)有從函數(shù)中返回,但是卻可以響應(yīng)其他消息"不能夠吧?響應(yīng)也是其它線程響應(yīng)的
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            在线观看欧美| 欧美成人情趣视频| 欧美四级在线观看| 久久久伊人欧美| 亚洲欧美激情精品一区二区| 亚洲国产成人av好男人在线观看| 亚洲一区亚洲| 亚洲一区一卡| 久久九九久精品国产免费直播| 麻豆精品在线视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲欧美另类在线| 亚洲欧美一区二区三区在线| 亚洲一级片在线观看| 亚洲免费影院| 免费在线成人av| 最新成人在线| 午夜精品美女自拍福到在线 | 久久躁狠狠躁夜夜爽| 久久亚洲一区二区| 欧美性猛交视频| 国产精品午夜av在线| 国产精品尤物福利片在线观看| 国产日韩av在线播放| 亚洲风情在线资源站| 一区二区三区av| 欧美福利电影网| 亚洲欧美日韩一区二区在线| 嫩草影视亚洲| 精品福利免费观看| 亚洲欧美视频在线观看视频| 久久久久综合网| 一区二区三区久久精品| 久久久噜噜噜久久久| 国产精品久久久久久久久免费樱桃 | 在线观看欧美激情| 亚洲欧美日韩国产| 亚洲伦理精品| 欧美大片在线影院| 亚洲午夜久久久久久久久电影院| 欧美淫片网站| 国产欧美精品一区二区三区介绍| 亚洲美女区一区| 亚洲国产欧美不卡在线观看| 免费成人激情视频| 亚洲国产精品久久| 亚洲国产日韩一区二区| 欧美v日韩v国产v| 亚洲激情校园春色| 亚洲第一毛片| 国产精品v欧美精品v日本精品动漫 | 国产精品99久久久久久www| 欧美久色视频| 性一交一乱一区二区洋洋av| 99热这里只有精品8| 国产欧美日韩一区二区三区在线观看 | 亚洲精品男同| 国产精品久久午夜| 亚洲国产色一区| 99精品久久久| 国产一区自拍视频| 亚洲国产另类久久精品| 欧美日韩免费在线视频| 久久久久99| 欧美色播在线播放| 久久爱www久久做| 欧美日韩精品免费| 蜜桃久久精品乱码一区二区| 午夜精品美女久久久久av福利| 欧美与黑人午夜性猛交久久久| 最近中文字幕mv在线一区二区三区四区 | 亚洲伦理中文字幕| 欧美一区二区三区免费观看| 一区二区日韩| 欧美日韩喷水| 中文在线资源观看视频网站免费不卡| **性色生活片久久毛片| 久久久久久久综合狠狠综合| 欧美一区二区三区婷婷月色| 一区二区三区精品| 欧美午夜精品久久久久免费视| 久久精品一区蜜桃臀影院| 欧美午夜视频在线观看| 99这里只有久久精品视频| 亚洲第一狼人社区| 亚洲网站啪啪| 宅男66日本亚洲欧美视频| 久久精品国产99精品国产亚洲性色| 亚洲精品综合| 你懂的亚洲视频| 欧美国产日韩视频| 国产精品v欧美精品v日本精品动漫 | 亚洲大片一区二区三区| 亚洲在线视频一区| 亚洲一级片在线看| 欧美在现视频| 欧美国产一区二区在线观看| 久久精品成人欧美大片古装| 欧美日韩国产系列| 亚洲国产精品福利| 国产欧美日韩不卡| 午夜精品国产精品大乳美女| 亚洲欧美一区二区精品久久久| 欧美午夜免费电影| 午夜精品999| 久久亚洲私人国产精品va| 一色屋精品亚洲香蕉网站| 欧美成年人网| 亚洲视频一起| 免费成人在线视频网站| 中文欧美日韩| 狠狠色综合色区| 欧美日韩一区国产| 久久国产精品久久国产精品| 欧美电影免费观看网站| 99re6这里只有精品视频在线观看| 欧美精品一区二区三区高清aⅴ| 亚洲一区二区精品视频| 欧美国产丝袜视频| 久久av一区二区三区漫画| 亚洲国产日韩欧美一区二区三区| 欧美小视频在线观看| 久久久久久精| 欧美一区免费视频| 亚洲一区二区综合| 欧美激情按摩在线| 久久永久免费| 欧美亚洲日本网站| 亚洲一区二区三区在线看| 亚洲国产精品女人久久久| 国产在线视频不卡二| 国产视频久久久久久久| 国产精品亚洲美女av网站| 国产精品久久久对白| 欧美日韩一区二区在线观看视频| 欧美成人久久| 久久精品亚洲一区| 欧美一级大片在线观看| 亚洲在线一区二区| 欧美一区二区三区四区在线观看| 亚洲一区二区成人| 亚洲欧美在线免费观看| 在线亚洲+欧美+日本专区| 中国亚洲黄色| 欧美一区二区三区视频在线观看 | 久久福利影视| 欧美韩国日本综合| 一区二区欧美日韩| 久久久久国产精品麻豆ai换脸| 免费观看日韩av| 欧美成人午夜剧场免费观看| 久久久久久久综合| 亚洲免费av观看| 久久久99爱| 国产精品久久久久久一区二区三区| 国产精品一区二区三区久久久| 精品福利电影| 久久久久五月天| 亚洲一区久久| 欧美三级在线播放| 亚洲精品视频一区| 免费不卡亚洲欧美| 欧美一区日韩一区| 国产拍揄自揄精品视频麻豆| 国产精品人人爽人人做我的可爱| 国产一区视频在线看| 性一交一乱一区二区洋洋av| 亚洲精品久久久久久久久| 欧美在线视频不卡| 国产欧美日韩91| 欧美一区二区三区四区在线| 中文欧美日韩| 国产精品激情av在线播放| av成人免费观看| 日韩午夜视频在线观看| 欧美激情在线观看| 午夜一区在线| 国产有码一区二区| 老司机aⅴ在线精品导航| 久久久五月婷婷| 亚洲第一视频| 亚洲人成网站777色婷婷| 久久免费视频网站| 亚洲国产精品激情在线观看| 欧美激情免费在线| 国产精品欧美久久| 久久视频一区二区| 欧美精品日本| 一本色道久久综合亚洲精品不卡| 亚洲人成毛片在线播放女女| 欧美在线视频网站| 一区二区高清视频在线观看| 欧美一乱一性一交一视频| 亚洲精品一区二| 欧美一区二区三区视频| 欧美日韩亚洲一区在线观看| 久久久欧美精品| 国产精品h在线观看| 欧美大色视频| 精品福利av|