Jan 09
今天打开了 lighttpd 得 mod_status,发现居然 fd-Event-Handler 默认用的是 Poll,大吃了一惊。还以为他怎么也会根据平台使用 kqueue 呢。网上搜了一下,找到了配置的方法,不需要重新编译只需要在 conf 里面配置一下。
server.event-handler = “freebsd-kqueue”
当然还可以选择其他,详细的参考 lighttpd wiki 吧。
今天打开了 lighttpd 得 mod_status,发现居然 fd-Event-Handler 默认用的是 Poll,大吃了一惊。还以为他怎么也会根据平台使用 kqueue 呢。网上搜了一下,找到了配置的方法,不需要重新编译只需要在 conf 里面配置一下。
server.event-handler = “freebsd-kqueue”
当然还可以选择其他,详细的参考 lighttpd wiki 吧。
这两天通过看 C10K 的文章对 kqueue 萌发了比较大的兴趣。于是又温习了一下 C 语言,立即上手学着想写写东西。
说道 kqueue,可以看下之前的 blog,它是在 BSDCON 2000 时候提出来的,是一个 edge-triggered 方式的通知形式。不同与 level-triggered 方式的传统 select() 和 poll(),在 fd 列表数量很大的情况下不至于增加CPU的负担。
kqueue 的 API 设计的相当精简,只有两个新的系统调用,kqueue() 和 kevent()。kqueue() 是初始化环境,kevent() 则是负责了注册和取回事件列表。这两个 API 用起来还是相当方便的,大体上是以 kqueue() 初始化开始,然后使用 kevent() 注册感兴趣的事件和需要监视的条件,再之后就可以用 kevent() 来获得触发的事件了,一般使用一个主循环去处理就可以了。
了解原理之后就可以动手做一下了,Mac OS X 也早就提供了 kqueue 的支持,可以直接用 C 写相关程序进行学习了。
Recent Comments