1.循环式/迭代式(iterator)服务器
- 无法充分利用多核CPU,不适合执行时间较长的服务
2.并发式服务器
- one connection per process/one connection per thread
- 适合执行时间比较长的业务
3.prefork or pre thread
- 惊群现象
4.反应式(reactive)服务器(reactor模式)
- 并发处理多个请求,实际上是在一个线程中完成。无法充分利用多核CPU
- 不适合执行时间比较长的服务,所以为了让客户感觉是在“并发”处理而不是“循环”处理,每个请求必须在相对较短时间内执行
5.reactor + thread per request
6.reactor + worker thread
7.reactor + threadpool(能适应密集计算)
8.multiple reactors(能适应更大的突发IO)
- reactors in threads(one loop per thread)
- reactors in processes
9.multiple reactors + thread pool
- one loop per thread + threadpool,适应突发IO与密集计算
10.proactor服务器(proactor模式,基于异步IO)
- 理论上proactor比reactor效率更高一些
- 异步IO能够让IO操作与计算重叠,充分利用DMA特性
- Linux异步IO
glibc aio(aio *); //有bug
kernel native aio(io *); //也不完美,目前仅支持O_DIRECT方式来对磁盘读写,跳过系统缓存。要自己实现缓存,难度不小
- boost asio实现的proactor,实际上不是真正意义上的异步IO,底层是用epoll来实现的,模拟异步IO