網路IPC非阻塞和非同步I O

2021-08-13 15:50:21 字數 744 閱讀 8549

通常,recv函式沒有資料可用時會阻塞等待。同樣地。當套接字輸出佇列沒有祖公空間用來傳送訊息時,函式send會阻塞。在套接字非阻塞模式下,行為會改變。這種情況下,這些函式不會阻塞而失敗,設定errno為ewouldblock或者eagain。當這些發生時,可以使用poll或者select來判斷何時能接受或者傳輸資料。

套接字機制有自己的方式來處理非同步i/o.一些文獻中吧經典的基於套接字的非同步i/o機制稱作「基於訊號的i/o」以區別於實時擴充套件中的非同步i/o機制。

在基於套接字的非同步i/o中,當能夠從套接字中讀取資料,或者套接字寫佇列變得可用時,可以安排傳送訊號sigio。通過兩個步驟歐來使用非同步i/o;

1:建立套接字擁有者關係,訊號可以被傳送到合適的程序。

2:通知套接字當i/o操作不會阻塞時發訊號告知。

可以使用三種方式來完成第乙個操作步驟

1:在fcntl使用f_setown命令(linux2.4.22支援)

2;在ioctl中使用fiosetown命令(linux2.4.22不支援)

3:在ioctl中使用siocspgrp命令(linux2.4.22支援)

要完成第二個操作,有兩個選擇:

1;在fcntl中使用f_setfl命令並且啟用檔案標誌o_async。 (linux2.4.22支援)

2;在ioctl中使用fioasync。(linux2.4.22支援)

採用訊號sigaction函式來註冊接收到sigio所要做的處理。

網路IO模型(同步非同步,阻塞非阻塞)

摘錄自 網路應用需要處理的無非兩大類問題 網路i o,資料計算 網路io的模型大致有如下幾種 同步模型 阻塞非阻塞 多路復用 訊號驅動式 非同步io 網路io的本質是socket的讀取,socket在linux系統被抽象為流,io可以理解為對流的操作。這個操作分為2個階段 1 等待流資料準備 2 從...

同步IO 非同步IO 阻塞IO 非阻塞IO

同步io 非同步io 阻塞io 非阻塞io,這幾個詞常見於各種各樣的與網路相關的文章之中,往往不同上下文中它們的意思是不一樣的,以致於我在很長一段時間對此感到困惑,所以想寫一篇文章整理一下。posix 可移植作業系統介面 把同步io操作定義為導致程序阻塞直到io完成的操作,反之則是非同步io按pos...

IO 同步,非同步,阻塞,非阻塞

參考文章 好文推薦 唉最近真是高產似母豬,剛進新公司工作量暫時不飽和,只能每天學學學學學學查漏補缺啦,學習使我快樂哈哈哈哈哈哈哈哈 標題裡的詞彙相信都經常看到,但是能說清楚的估計20個人裡面能有1個就不錯了,網上的資料也是五花八門,大部分描述差不多,很多時候估計作者本身也是似懂非懂,我也看了很多文章...