csdn lidp http://blog.csdn.net/perfectpdl
在web服务器中,主要就是向socket写数据和从socket读数据。通常,web服务器是IO密集型程序,这就要求在数据的读写上,web服务器必须能够具有很好的性能,不会因为某个socket的阻塞而致使其他socket也被阻塞,否则会大大降低服务器的性能。因此,大部分的web服务器都采用非阻塞IO进行数据的读写。lighttpd通过fdevent系统,采用类似OO中面向对象的方式将对IO事件的处理进行封装,对于不同的IO系统,提供一个统一的接口,其核心机制与libevent/libev库大同小异,都是采用了所谓的Reactor模式,也就是非阻塞IO加多路复用(non-blocking IO + IO multiplexing),lighttpd通过fdevent将各种操作系统上支持的io多路复用实现进行封装,常用的io多路复用技术包括select, poll,kqueue,epoll. select应该是最原始了,基本所有类unix系统都支持,然后是poll,poll是select的升级版,并不是所有类unix系统都支持,bsd系列没有实现,poll主要解决select对单进程最大fd数的限制,但仍然没改变其轮训的本性。kqueue 是bsd系列操作系统提供的解决select,poll的性能问题,最后是明星级的 epoll,是linux 2.6 版本以后实现的一个类k