在I/O模型的讨论中,我们没有引入线程的概念,也没有区分其对accept和read的不同行为,我们在这里将他们引入I/O模型中,并与线程池模型组合,将会看到很多有趣的网络框架模型。同样,在这里我们不讨论I/O模型是Reactor还是Proactor,除非有特殊需要。
1.单线程模型
如上图所示,所有的处理过程都在一个线程中,这种模型下能做到零数据拷贝,零切换(不存在切换)和零加锁(不存在加锁),劣势也是明显的:无法利用CPU全部能力,处理请求过程中出现I/O等待时将会卡死所有请求。
单线程模型一般可以结合多进程来做服务器,由进程组提供服务。单线程模型在处理请求过程中无I/O阻塞的情况下,仍然是很高效的模型,同时还能有效的降低编程难度,比如无状态逻辑层的编写,单线程多进程就是一个不错的选择。另外在数据存储层,会强行要求操作串行化,否则容易引起一致性问题,这个时候单线程也是一个不错的选择。
2.单线程模型的多线程调度