WebServer icon indicating copy to clipboard operation
WebServer copied to clipboard

请问一下,WebServer的工作队列的多线程与Nginx的多进程模型相比何有优劣的比较?

Open grasslog opened this issue 5 years ago • 4 comments

grasslog avatar Jun 21 '19 01:06 grasslog

个人的愚见(我只是一个初学者):

  1. 首先从多进程与多线程来说, nginx 的 worker 挂掉了, master 还能重启一个 worker 进程, 多线程的话, 自然就是 core dump.
  2. nginx 可以杀掉 worker, 然后加载配置文件, 在 fork 新的 worker, 进行热升级.
  3. nginx 多数应用于各个连接无关联的场景, 虽然 WebServer 也是这样, 但是我们可以很方便的扩展计算任务, 并分配到不同的计算线程中执行. 想想多进程, 难道要 IPC 吗... 说的不一定对, 但我们可以讨论一下.

yxBeginner avatar Jun 21 '19 12:06 yxBeginner

这就是多线程与多进程的区别。。。那进一步的提问,为什么WebServer(muduo)采用多线程而不采用多进程呢?换句话说就是在这样的场景下多线程有什么好处呢?

grasslog avatar Jun 21 '19 13:06 grasslog

可以看看陈硕的博客. 这个 还有这个 他的主要意见是, 根据一次请求处理使用的内存大小来区分这两者, 单进程多线程可以避免 CPU cache 的频繁换入换出. 对于静态 server, 个人感觉应该没有什么本质差别, 毕竟瓶颈在磁盘 IO 和网络 IO 上.

yxBeginner avatar Jun 21 '19 14:06 yxBeginner

感谢,

grasslog avatar Jun 22 '19 00:06 grasslog