多进程 VS 多线程 VS 线程池 VS EventLoop
多进程 VS 多线程 VS 线程池 VS EventLoop 在现在的编程过程中,经常听到多进程,多线程,线程池,EventLoop 的概念,选择一个正确的驱动模型,有助于提升代码的性能。 注:本文仅仅讨论并发的情况。 进程和线程 进程:操作系统中 资源管理对象 ,管理虚拟内存,文件句柄,线程等资源,但是 进程不是执行单元 。 线程: 具体的执行单元 。CPU是实际的物理执行单元,通过 寄存器 可以控制CPU执行的代码以及状态。而线程就是包含了一个任务的CPU上下文(寄存器),任务状态(就绪|阻塞|运行),所属用户等信息的对象。操作系统接收到时间中断(INT)后, 通过轮转线程中的CPU上下文(寄存器)信息,实现了多任务的轮转 。 多进程 多进程:针对并发请求,一个请求开启一个进程进行处理。早起CGI就是这么干的。 代表:早期PHP,CGI类 优点: 一个业务进程奔溃不影响另外一个业务进程,从操作系统层面上隔离业务执行 如果进程采用Socket之类的RPC调用,那么非常容易部署到网络环境上 缺点: RPC调用比较难以编写 频繁的开启和关闭进程,性能比较差 不允许内存共享(排除内核支持情况) 多线程 多线程:针对不同的业务逻辑,并发的开启多个线程进行执行。 代表:早期 Tomcat Bio模型 优点: 内存是共享的 编写并发模型比较方便 有效的利用多核CPU 缺点: 并发量过大的时候