高性能web服务器的关键在于如何处理数据I/O,下面是05年的一篇老文章,主要讲解了同步/异步,阻塞/非阻塞的概念以及Reactor/Proactor I/O设计模式。
http://www.artima.com/articles/io_design_patterns.html
概括而言,
1、同步/异步的概念区别在于I/O操作由谁发起,如果由用户进程/线程发起则为同步,如果由OS完成然后通过回调机制通知用户进程,则为异步;
2、阻塞/非阻塞的概念区别在于所调用的系统函数,阻塞模式下,用户进程只能等待,非阻塞模式下,用户进程可以处理其他请求;
3、Reactor是反应器模式,系统通知数据可读,用户进程进行实际的I/O读取操作,是一种同步模式;Proactor则为前置处理器模式,OS全权负责处理I/O读取操作,完成后通知用户进程,用户进程只需要在预设的用户缓存空间中处理数据,是一种异步模式。Proactor的实现依赖于OS实现高效的异步I/O API。在LINUX系统上,Reactor模式实现效果更好。nginx就是用Reactor模式来实现的,进程(单线程),不需要考虑线程同步/context切换的开销,同时可为多核系统fork多个进程/任务,有很高的并发处理能力;
4、使用事件分离器(eventdemultiplexor)来达到I/O多路复用的目的,用户进程注册感兴趣的事件,事件分离器把来自多个事件源的事件分发给各自的事件处理器,也就是Register/Dispatcher/Handler的模式。