在前面文章从MemCache到一致性哈希算法中,翻阅了MemCache依赖的一个类库libevent,并且探索到大量的有趣的信息,觉得还是单独写一篇记录比较好,于是有了这篇,当然,内容也只是引导性的,后续会通过深入阅读相关内容补充。
libevent是一个事件通知的C库,顺便说一下,MemCache是使用C语言开发的。
libevent API提供了一种机制,用于在文件描述符上发生特定事件或达到超时后执行回调函数。 此外,libevent还支持由于信号或常规超时引起的回调。
libevent旨在替换事件驱动的网络服务器中的事件循环。 应用程序只需调用event_dispatch(),然后动态添加或删除事件,而无需更改事件循环。
libevent支持多个操作系统平台的多路复用实现,包括 /dev/poll, kqueue(2), event ports, POSIX select(2), Windows select(), poll(2), and epoll(4).(超链接对应具体实现的文档,有兴趣可以翻阅看看),封装了操作系统的实现,提供统一的API。
Libevent还为缓冲网络IO(buffered network IO)提供了一个复杂的框架,支持套接字(sockets),过滤器(filters),速率限制(rate-limiting),SSL,零拷贝文件传输(zero-copy file transmission)和IOCP。 Libevent包括对几种有用协议的支持,包括DNS,HTTP和最小的RPC框架。
有关网络服务器事件通知机制的更多信息,请参阅Dan Kegel的“The C10K problem”网页。
The C10K problem中介绍了关于如何配置操作系统和编写代码以支持数千个客户端的说明。讲到了很多关于网络IO优化的建议。(建议可以使用刷抖音的时间来看看)。
还大概翻了下Dan Kegel的网站的其他地方,发现关于他们家的很多分享内容,没有细看,但是总体给我的感觉是,很朴素。我觉得关于个人blog本该如此,把最有意义,投入时间做的事情记录下来,可以是工作、学习、甚至照料孩子,处理个人卫生等等这样的琐事。