1. 程式人生 > >《Redis官方教程》- 事件庫

《Redis官方教程》- 事件庫

為什麼需要一個事件庫(Event Library)?

讓我們通過一系列Q&A來弄明白。

Q:你期望網路伺服器都做些什麼事情?
A:在它監聽的埠上等待連線的到來,然後接收(accpet)它們。

Q:呼叫accept會產生一個描述符,我該怎麼處理它?
A:先儲存這個描述符,然後對它進行非阻塞(non-blocking)的讀寫(read/write)操作。

Q:為什麼讀寫操作必須用非阻塞的方式呢?
A:如果伺服器阻塞在檔案(在Unix世界socket也是檔案)I/O操作上,這期間它還怎麼處理其他連線的請求呢?

Q:我想我必須在socket上做很多次非阻塞操作去看它什麼時候準備好,是這樣嗎?
A:是的,這就是事件庫為你所做的工作,現在你明白了。

Q:那事件庫是怎麼做到的呢?
A:使用作業系統的輪詢(polling)機制以及定時器(timer)。

Q:有沒有開源的事件庫能完成你說的這些功能?
A:當然有,libeventlibev就是這樣的事件庫。

Q:Redis用開源事件庫來處理Socket I/O嗎?
A:不,因為一些原因Redis使用自己的事件庫。