服务器并发模型的总结
服务器常用并发模型
1.单线程同步模型
单线程同步模型是最简单的服务器模型,每次只能处理一个客户端的连接,其他连接必须要等到前面的
连接关闭后才能得到服务器的处理,否则发过来的请求会悬挂住,没有任何响应;服务端是串行地处理客
户端的连接的
一个客户端必须要等到另外一个客户端运行结束后才可以运行,这也太慢了吧
2.多线程同步模型
服务器可以并行地处理多个客户端的连接,没来一个连接就开启一个新的线程单独进行处理,每个线程
都是同步读写客户端的连接的
3.多进程同步模型
Java使用者很少能够体会多进程的魅力,他们都是使用多线程。但是在Python中并不常见,因为Python
的GIL只能使单个进程占满一个CPU核心,多线程不能利用多核的优势,所以Python服务器可以使用多进程
模型
4.PreForking同步模型
进程在操作系统中是非常耗资源的,所以要对服务器开辟的进程数量进行限制,避免系统的负载过重,
这就是多进程PreForking模型。
这种模型预先产生多个子进程,共同对服务器套接字竞争资源,但是最终只能有一个进程获取到。
如果并行的连接数超过了prefork的数量,那么后来的客户端请求将会阻塞。但是这样也可以通过子进程
的单线程同步模型改成多进程同步模型的方式解决
5.单进程异步模型
上述的服务器模型都是同步的,而现代的服务器一般都是异步的,效率是比较高的,它是一种非阻塞的
服务器模型,实现了对进程和线程的解放,再加上事件轮询机制的配合使得它的性能比同步高出了许多
像Nignx、Nodejs、Redis都是基于异步模型构建出来的,性能非常高
6.PreForking 异步模型
单进程的IO并发能力有限,虽然使用了事件轮询和异步读写功能,但是还不能应对高并发的需求,所以
需要使用多进程,这样也可以对我们的CPU最大限度的利用
开源的Tornado服务器和Nignx就是采用了多进程PreForking模型达到了超高并发的处理能力