閱讀393 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《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使用自己的事件庫。

最後更新:2017-05-19 17:33:31

  上一篇:go  Redis內部實現文檔
  下一篇:go  《Redis官方文檔》Redis事件庫