什么是进程
进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列。
进程调度器选中它的时候就会为它分配 CPU 时间,程序开始真正运行。
什么是线程
线程是程序执行时的最小单位,它是进程的一个执行流,是 CPU 调度和分派的基本单位。一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部 变量。
线程由 CPU 独立调度执行,在多 CPU 环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。
进程和线程的区别
- 线程共享内存空间,进程有独立的内存空间。
- 线程启动速度快,进程启动速度慢,二者的运行速度是无法比较的。
- 线程是执行的指令集,进程是资源的集合。
- 两个子进程之间数据不共享,完全独立。同一个进程下的线程共享同一份数据。
- 创建新的线程很简单,创建新的进程需要对他的父进程进行一次克隆。
- 一个线程可以操作(控制)同一进程里的其他线程,但是进程只能操作子进程。
- 同一个进程的线程可以直接交流,两个进程想要通信,必须通过一个中间代理来实现。
- 对于线程的修改,可能会影响到其他线程的行为。但是对于父进程的修改不会影响到子进程。
进程和线程的选择
- 需要频繁创建销毁的优先使用线程,因为对进程来说创建和销毁一个进程的代价是很大的。
- 线程的切换速度快,所以在需要大量计算,切换频繁时使用线程,还有耗时的操作时用使用线程可提高应用程序的响应。
- 因为对 CPU 系统的效率使用上线程更占优势,所以可能要发展到多机分布的用进程,多核分布用线程。
- 并行操作时用线程,如C/S架构的服务器端并发线程响应用户的请求。
- 需要更稳定安全时,适合选择进程,需要速度时,选择线程更好。