• <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>
            posts - 297,  comments - 15,  trackbacks - 0
            在進行網(wǎng)絡(luò)編程時,我們常常見到同步、異步、阻塞和非阻塞四種調(diào)用方式。這些方式彼此概念并不好理解。下面是我對這些術(shù)語的理解。 同步 所謂同步,就是在發(fā)出一個功能調(diào)用時,在沒有得到結(jié)果之前,該調(diào)用就不返回。按照這個定義,其實絕大多數(shù)函數(shù)都是同步調(diào)用(例如sin, isdigit等)。但是一般而言,我們在說同步、異步的時候,特指那些需要其他部件協(xié)作或者需要一定時間完成的任務(wù)。最常見的例子就是 SendMessage。該函數(shù)發(fā)送一個消息給某個窗口,在對方處理完消息之前,這個函數(shù)不返回。當(dāng)對方處理完畢以后,該函數(shù)才把消息處理函數(shù)所返回的 LRESULT值返回給調(diào)用者。 異步 異步的概念和同步相對。當(dāng)一個異步過程調(diào)用發(fā)出后,調(diào)用者不能立刻得到結(jié)果。實際處理這個調(diào)用的部件在完成后,通過狀態(tài)、通知和回調(diào)來通知調(diào)用者。以CAsycSocket類為例(注意,CSocket從CAsyncSocket派生,但是起功能已經(jīng)由異步轉(zhuǎn)化為同步),當(dāng)一個客戶端通過調(diào)用 Connect函數(shù)發(fā)出一個連接請求后,調(diào)用者線程立刻可以朝下運行。當(dāng)連接真正建立起來以后,socket底層會發(fā)送一個消息通知該對象。 這里提到執(zhí)行部件和調(diào)用者通過三種途徑返回結(jié)果:狀態(tài)、通知和回調(diào)。可以使用哪一種依賴于執(zhí)行部件的實現(xiàn),除非執(zhí)行部件提供多種選擇,否則不受調(diào)用者控制。如果執(zhí)行部件用狀態(tài)來通知,那么調(diào)用者就需要每隔一定時間檢查一次,效率就很低(有些初學(xué)多線程編程的人,總喜歡用一個循環(huán)去檢查某個變量的值,這其實是一種很嚴重的錯誤)。如果是使用通知的方式,效率則很高,因為執(zhí)行部件幾乎不需要做額外的操作。至于回調(diào)函數(shù),其實和通知沒太多區(qū)別。 阻塞 阻塞調(diào)用是指調(diào)用結(jié)果返回之前,當(dāng)前線程會被掛起。函數(shù)只有在得到結(jié)果之后才會返回。 有人也許會把阻塞調(diào)用和同步調(diào)用等同起來,實際上他是不同的。對于同步調(diào)用來說,很多時候當(dāng)前線程還是激活的,只是從邏輯上當(dāng)前函數(shù)沒有返回而已。例如,我們在CSocket中調(diào)用Receive函數(shù),如果緩沖區(qū)中沒有數(shù)據(jù),這個函數(shù)就會一直等待,直到有數(shù)據(jù)才返回。而此時,當(dāng)前線程還會繼續(xù)處理各種各樣的消息。如果主窗口和調(diào)用函數(shù)在同一個線程中,除非你在特殊的界面操作函數(shù)中調(diào)用,其實主界面還是應(yīng)該可以刷新。 socket接收數(shù)據(jù)的另外一個函數(shù)recv則是一個阻塞調(diào)用的例子。當(dāng)socket工作在阻塞模式的時候,如果沒有數(shù)據(jù)的情況下調(diào)用該函數(shù),則當(dāng)前線程就會被掛起,直到有數(shù)據(jù)為止。 非阻塞 非阻塞和阻塞的概念相對應(yīng),指在不能立刻得到結(jié)果之前,該函數(shù)不會阻塞當(dāng)前線程,而會立刻返回。 對象的阻塞模式和阻塞函數(shù)調(diào)用 對象是否處于阻塞模式和函數(shù)是不是阻塞調(diào)用有很強的相關(guān)性,但是并不是一一對應(yīng)的。阻塞對象上可以有非阻塞的調(diào)用方式,我們可以通過一定的API去輪詢狀態(tài),在適當(dāng)?shù)臅r候調(diào)用阻塞函數(shù),就可以避免阻塞。而對于非阻塞對象,調(diào)用特殊的函數(shù)也可以進入阻塞調(diào)用。函數(shù)select就是這樣的一個例子。
            posted on 2009-12-05 23:10 chatler 閱讀(246) 評論(0)  編輯 收藏 引用 所屬分類: OS
            <2010年2月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28123456
            78910111213

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            色诱久久av| 国产成人综合久久久久久| 久久综合伊人77777麻豆| 欧美午夜A∨大片久久| 久久久久久精品无码人妻| 久久婷婷五月综合97色| 97久久综合精品久久久综合| 久久婷婷五月综合97色直播| 少妇久久久久久被弄高潮| 久久久久久国产精品无码下载| 久久天天躁狠狠躁夜夜avapp| 久久精品免费一区二区三区| 久久久久亚洲AV无码专区首JN| 国产综合久久久久久鬼色| 亚洲人成无码久久电影网站| 99久久国产综合精品麻豆| 国内精品伊人久久久影院| 久久精品成人免费网站| 午夜精品久久久久久中宇| 久久国产影院| 日韩精品国产自在久久现线拍 | 91久久成人免费| 天堂久久天堂AV色综合| 久久91精品国产91久| 久久国产免费直播| 岛国搬运www久久| 久久九九全国免费| 91久久精品91久久性色| 久久成人国产精品| 狼狼综合久久久久综合网| 亚洲AV无一区二区三区久久| 久久综合色老色| 久久久精品久久久久影院| 久久性生大片免费观看性| 久久精品国产亚洲AV不卡| 国内精品久久久久久久亚洲| 中文字幕一区二区三区久久网站| 国产精品久久久久久久| 久久九九亚洲精品| 国产精品青草久久久久福利99 | 欧美精品福利视频一区二区三区久久久精品 |