Python线程与进程

什么是进程

进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列。

进程调度器选中它的时候就会为它分配 CPU 时间,程序开始真正运行。

什么是线程

线程是程序执行时的最小单位,它是进程的一个执行流,是 CPU 调度和分派的基本单位。一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部 变量

线程由 CPU 独立调度执行,在多 CPU 环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。

进程和线程的区别

  • 线程共享内存空间,进程有独立的内存空间。
  • 线程启动速度快,进程启动速度慢,二者的运行速度是无法比较的。
  • 线程是执行的指令集,进程是资源的集合。
  • 两个子进程之间数据不共享,完全独立。同一个进程下的线程共享同一份数据。
  • 创建新的线程很简单,创建新的进程需要对他的父进程进行一次克隆。
  • 一个线程可以操作(控制)同一进程里的其他线程,但是进程只能操作子进程。
  • 同一个进程的线程可以直接交流,两个进程想要通信,必须通过一个中间代理来实现。
  • 对于线程的修改,可能会影响到其他线程的行为。但是对于父进程的修改不会影响到子进程。

进程和线程的选择

  • 需要频繁创建销毁的优先使用线程,因为对进程来说创建和销毁一个进程的代价是很大的。
  • 线程的切换速度快,所以在需要大量计算,切换频繁时使用线程,还有耗时的操作时用使用线程可提高应用程序的响应。
  • 因为对 CPU 系统的效率使用上线程更占优势,所以可能要发展到多机分布的用进程,多核分布用线程。
  • 并行操作时用线程,如C/S架构的服务器端并发线程响应用户的请求。
  • 需要更稳定安全时,适合选择进程,需要速度时,选择线程更好。