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

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

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

            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麻豆| 久久免费大片| 久久丫精品国产亚洲av不卡| 97久久国产亚洲精品超碰热| 精品无码久久久久久久久久| 欧美黑人激情性久久| 久久精品国产99久久久| 久久成人18免费网站| 久久99精品久久久大学生| 91久久精品视频| 亚洲国产精品综合久久一线| 99精品国产在热久久无毒不卡 | 久久99精品国产99久久| 久久久久久极精品久久久| 久久亚洲精品成人av无码网站| 精品无码人妻久久久久久| 77777亚洲午夜久久多喷| 久久久久亚洲av成人网人人软件| 久久96国产精品久久久| 色欲久久久天天天综合网精品| 999久久久免费国产精品播放| 久久精品国产亚洲AV蜜臀色欲| 亚洲午夜福利精品久久| 欧美久久久久久| 一本大道久久a久久精品综合| 亚洲国产精品无码久久久蜜芽| 久久996热精品xxxx| 国产精品久久精品| 久久久久亚洲AV成人片 | 久久无码国产| 久久亚洲精品视频| 国产99久久精品一区二区| 老色鬼久久亚洲AV综合| 久久精品国产亚洲AV香蕉| 欧美精品国产综合久久| 午夜精品久久久久久毛片| 精品国产乱码久久久久久人妻| 亚洲中文字幕伊人久久无码|