基于多进程和基于多线程服务器的优缺点及nginx服务器的启动过程

基于多进程服务器的优点:

  1.由操作系统进行调度,运行比较稳定强壮

  2.能够方便地通过操作系统进行监控和管理

     例如对每个进程的内存变化状况,甚至某个进程处理什么web请求进行监控.同时可以通过给进程发送信号量,实现对应用的各种管理

  3.隔离性好

     一个进程出现问题只有杀掉它重启就可以,不影响整体服务的可用性

     很容易实现在线热部署和无缝升级

      不需要考虑线程安全问题

   4.充分利用多核cpu,实现并行处理

基于多进程服务器的缺点:

   1.内存消耗比较大,每个进程都独立加载完整的应用环境

   2.cpu消耗偏高,高并发下,进程之间频繁进行上下文切换,需要大量的内存换页操作

   3.很低的io并发处理能力,只适合处理短请求,不适合处理长请求

基于多线程服务器的优点:

    1.对内存的消耗小

       线程之间共享整个应用环境,每个线程栈都比较小,一般不到1M

    2.cpu上下文切换比较快

    3.io的并发能力强

        javaVM可以轻松维护几百个并发线程切换开销,远高于多进程几十个并发进程的处理能力

    4.有效利用多核cpu进行并行计算

基于多线程服务器的缺点:

    1.不方便操作系统的管理

    2.VM对内存的管理要求非常高,GC的策略会影响多线程并发能力和系统吞吐量

    3.由于存在对共享资源操作,一旦出现线程"死锁"和线程阻塞,很容易使整个应用失去可用性

nginx的重启过程:

    1.主进程重新加载应用环境

    2.启动新的woker进程,同时向老的woker进程发送消息

    3.老的woker进程收到消息后不再处理新的请求,将之前收到的请求处理完毕后退出

    4.主进程收到新的请求后就交给新的woker进程处理

相关推荐