《Redis官方教程》- 事件库

原文链接  译者:cndpzc

为什么需要一个事件库(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使用自己的事件库。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/117574.html

(0)
上一篇 2021年8月28日 03:24
下一篇 2021年8月28日 03:24

相关推荐

发表回复

登录后才能评论