• <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 閱讀(245) 評論(0)  編輯 收藏 引用 所屬分類: OS
            <2009年4月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            常用鏈接

            留言簿(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

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            超级碰碰碰碰97久久久久| 日本人妻丰满熟妇久久久久久| 久久人人添人人爽添人人片牛牛| 欧美精品丝袜久久久中文字幕| 国产精品一区二区久久精品涩爱| 亚洲国产美女精品久久久久∴| 国产一久久香蕉国产线看观看| 久久精品视频91| 久久久亚洲欧洲日产国码二区 | 久久精品人人做人人爽电影| 狠狠狠色丁香婷婷综合久久俺| 久久一区二区三区99| 久久人妻少妇嫩草AV蜜桃| 亚洲国产二区三区久久| 人妻无码精品久久亚瑟影视| 伊人久久大香线蕉影院95| 久久亚洲中文字幕精品有坂深雪| 精品久久久久久久中文字幕| 久久w5ww成w人免费| 欧美黑人激情性久久| 久久久91人妻无码精品蜜桃HD| 久久99国产精品久久99果冻传媒| 少妇熟女久久综合网色欲| 久久久久久久综合日本| 成人精品一区二区久久久| 久久国产乱子伦免费精品| 日韩精品久久无码中文字幕| 99久久这里只精品国产免费| 日本亚洲色大成网站WWW久久| 国产高潮久久免费观看| 99精品国产在热久久无毒不卡| 久久久久波多野结衣高潮| 伊人热热久久原色播放www| 日日狠狠久久偷偷色综合0| 久久精品国产色蜜蜜麻豆| 久久精品国产只有精品66| 一本大道久久a久久精品综合| 狠狠色丁香久久婷婷综| 99久久综合国产精品二区| 久久精品国产亚洲av瑜伽| 日韩电影久久久被窝网|