《Redis官方文檔》事件庫
究竟為什麼需要一個事件庫呢?讓我們通過下麵一係列問答來了解為什麼。
問:你希望網絡服務器持續不斷地做什麼事?
答:監聽端口上進來的連接請求並接收它們。
問:調用套接字的Accept方法產生一個描述符,我們用這個描述符做什麼?
答:保存這個描述符,並在它上麵完成一次非阻塞讀寫操作。
問:為什麼讀寫操作必須是非阻塞式的?
答:如果文件操作(在Unix係統中甚至於套接字都被描述成一個文件)是阻塞式的那麼當它在一次文件I/O操作中被鎖定時它怎麼可能接收另外一個請求
問:我猜我必須在套接字上做很多次非阻塞式讀寫操作來得知它何時才能準備好,我說得對嗎?
答:是的,這些就是事件庫為你做的事。現在你知道了吧。
問:那事件庫是怎麼來完成它需要做的事呢?
答:事件庫使用操作係統提供的輪詢設施配合定時器一起完成工作。
問:那麼有沒有開源事件庫來完成上麵你描述的工作呢?
答:是的。libevent和libev就是我首先想到的兩個這樣的事件庫。
問:Redis使用了這樣的開源事件庫來處理套接字輸入輸出了嗎?
答:並沒有,由於種種原因Redis實現了自己的事件庫。
最後更新:2017-05-19 18:01:46