天天看點

1.1.2 Linux epoll詳解1. I/O多路複用

1. I/O多路複用

1.1 流

流:

一個流可以是檔案,socket,pipe等等可以進行I/O操作的核心對象。

不管是檔案,還是套接字(Socket),還是管道(包括匿名和有名管道),我們都可以把他們看作流。

通過read,我們可以從流中讀入資料;

通過write,我們可以往流寫入資料。

以上面的流的定義為假設,我們需要從流中讀資料,但此時,流中還沒有資料,

(典型的例子為,用戶端要從socket讀如資料,但是伺服器還沒有把資料傳回來),

這時候該怎麼辦?

可以有下面兩種辦法處理:

> 阻塞:

阻塞是個什麼概念呢?

比如某個時候你在等快遞,但是你不知道快遞什麼時候過來,而且你沒有别的事可以幹(或者說接下來的事要等快遞來了才能做);

那麼你可以去睡覺了,因為你知道快遞把貨送來時一定會給你打個電話(假定一定能叫醒你)。

> 非阻塞忙輪詢:

接着上面等快遞的例子,如果用忙輪詢的方法,那麼你需要知道快遞員的手機号,然後每分鐘給他挂個電話:“你到了沒?”

很明顯一般人不會用第二種做法,不僅顯很無腦,浪費話費不說,還占用了快遞員大量的時間。

大部分程式也不會用第一種做法,因為第一種方法雖然簡單,但是效率很低,因

繼續閱讀