三次握手耗时 1ms,为什么 Nginx 可以处理百万级别的连接?
三次握手与服务端并发瓶颈
在多线程服务端模型中,master thread 负责通过 accept 建立客户端连接,再将连接投递到线程池中处理。此时有人提出疑问,如果三次握手耗时 1ms,那么 RPS(每秒请求数)岂不是被限制在 1000 以下?
然而,实践中像 Nginx 这样的服务器却能处理百万级别的连接,说明三次握手并没有成为瓶颈。
解决方法
服务端在 listen 监听时,实际上已经可以建立连接了。因此,accept 操作并不是在进行三次握手,而是在已建立队列中获取套接字来处理。接收连接阶段不会产生并发瓶颈。
Nginx 的高并发机制
Nginx 采用多进程 + IO 多路复用模型来解决并发问题。IO 多路复用不同于传统的一线程一连接方式,它可以在单个线程中通过系统调用同时管理多个连接,从而达到高并发的目的。
通过上述分析可知,accept 本身并不是并发瓶颈,Nginx 的高并发能力归功于其独特的进程模型和 IO 多路复用技术。
以上就是三次握手耗时 1ms,为什么 Nginx 可以处理百万级别的连接?的详细内容,更多请关注硕下网其它相关文章!