socket工作模式

來源:互聯網
上載者:User

阻塞模式

是socket的預設方式,也是最常用的方式,即函數阻塞直到調用完畢。可參見前面的例子。

可能造成阻塞的函數有:connect()、accept()、讀寫函數、select()、poll()、gethostbyname()等。

 

非阻塞模式

程式調用可能造成阻塞的函數時,如果會發生阻塞,這些函數返回-1並將errno設定為EAGAIN或EWOULDBLOCK,程式可繼續向下運行。可能阻塞的函數對應的任務完成,則再次調用該函數時就返回0表示運行結束。

非阻塞模式可以避免程式死結,但是需要程式不斷檢查各個可能阻塞的函數的狀態,當一個應用程式使用了非阻塞模式的通訊端,它需要使用一個迴圈來不停的測試是否一個檔案描述符有資料可讀(稱做polling)。應用程式不停的polling核心來檢查是否I/O操作已經就緒。這將是一個極浪費CPU資源的操作,因此不能實際應用。一般非阻塞模式是與同步I/O模式共同使用的。

進入非阻塞模式的方法,請參見函數說明

 

I/O多工(同步I/O模式)

使用select()、poll()等函數實現對多個socket的同步I/O操作。它能同時等待多個socket描述符,而這些socket描述符其中的任意一個進入讀就緒/寫就緒/出錯狀態,select()函數就可以返回。請參見函數說明和程式

 

訊號驅動I/O

 

 

非同步I/O

  
原文地址:http://www.aka.org.cn/Lectures/002/Lecture-2.1.8/Lecture-2.1.8/index.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.