你这个是 concurrency 的问题吧. 其实多线程, 你说的异步 IO(其实是 IO 多路复用) 都是实现 concurrency 的两个方式
比如像 redis 单线程基于 epoll 这种模型, node.js 这种模型都可以归结为 Event-base Concurrency, 那么这种模型和 multi-thread 对比有什么区别呢?
从这个角度来看 multi-thread 是 kernel 来决定下一个要调度处理的 thread 是哪一个, 线程数据多了无论是资源还是调度都会有点问题
event-base 是所有的事件都放在一个 thread 上, 然后由这个 thread 来决定下一个要执行的 event 是谁?
因为 multi-thread 会考虑到每一个 thread 的优先级等等, 而且如果 thread 数目过多那么肯定会影响到具体的调度. 对比 event-base, 切换线程需要切换上下文, 因此肯定会有性能的损耗. 而在 event-base 里面, 所有的 event 的优先级都是一样的, 然后在处理 event 的 handler 里面决定先处理哪一个 event. 但是同样有一个问题就是如果这个 event-base 里面 event 比较多, 那么性能肯定也会下来.而且 event-base 的另一个缺点就是没办法使用到多线程
所以一般都是采用多线程 + 事件的方式来写网络编程了现在.
nginx 是, lighttpd 是, 我们开源的 pika(
https://github.com/Qihoo360/pika )也是
我们还实现了这种模型的库
https://github.com/Qihoo360/pink