Neo's Blog

不抽象就无法深入思考
不还原就看不到本来面目!

0%

高性能服务器设计-Nginx IO模型

端口复用,通过互斥锁来避免惊群效应

为什么不采用多线程模型管理连接

  1. 无状态服务,无需共享进程内存
  2. 采用独立的进程,可以让互相之间不会影响。一个进程异常崩溃,其他进程的服务不会中断,提升了架构的可靠性。
  3. 进程之间不共享资源,不需要加锁,所以省掉了锁带来的开销。

为什么不采用多线程处理逻辑业务?

  1. 进程数已经等于核心数,再新建线程处理任务,只会抢占现有进程,增加切换代价。
  2. 作为接入层,基本上都是数据转发业务,网络 IO 任务的等待耗时部分,已经被处理为非阻塞/全异步/事件驱动模式,在没有更多 CPU 的情况下,再利用多线程处理,意义不大。
  3. 并且如果进程中有阻塞的处理逻辑,应该由各个业务进行解决,比如 openResty 中利用了 Lua 协程,对阻塞业务进行了优化。
你的支持是我坚持的最大动力!