- 进程是操作系统中资源分配的基本单位,是正在执行的程序的实例。
- 每个进程都有独立的内存空间、程序计数器、寄存器、堆栈等系统资源,进程之间互相隔离。
- 独立性: 每个进程在执行时拥有自己的地址空间,进程之间的数据不共享,必须通过进程间通信(IPC)来交换数据。
- 资源隔离: 进程拥有自己的资源,如内存、文件句柄等,因此一个进程的崩溃不会直接影响到其他进程。
- 开销大: 进程间的切换需要操作系统进行大量的资源管理(如内存分配、上下文切换等),因此开销较大。
- 多核利用: 进程可以在多核处理器上并行执行。
- 线程是进程中的执行单位,每个进程至少有一个线程(主线程)。线程是 CPU 调度的基本单位。
- 线程共享进程的地址空 间、全局变量和资源,但是每个线程有独立的栈空间和寄存器等执行环境。
- 轻量级:相对于进程,线程的创建和销毁开销较小。多个线程可以在一个进程内并发执行,资源共享。
- 共享资源:同一进程中的多个线程可以共享内存空间和资源,数据的交换比进程间通信更加高效。
- 同步问题:由于线程共享内存空间,多个线程访问同一资源时需要注意同步和互斥,否则会导致数据竞争和不一致的问题。
进程与线程
- 进程是系统资源分配的基本单位,而线程是CPU调度的基本单位;
- 同一进程可能有多个线程执行;
- 进程之间互相隔离,而同一进程的线程可以共享资源(加锁);
- 进程的切换需要大量资源,而线程切换相对轻量化;
- 协程是一种轻量级的用户级线程,通常由程序控制,而不是由操作系统进行调度。
- 协程的核心特性是“协作式”调度,即协程在执行过程中可以主动让出控制权,允许其他协程执行。它比线程更加高效,因为它们共享同一线程,不需要频繁的上下文切换。
- 轻量级:协程的创建和切换非常快速,几乎没有线程的开销,适合用于高并发的场景。
- 用户级调度:协程的调度由程序或运行时环境控制,操作系统并不干预协程的切换。
- 非抢占式:协程在执行时不会被外部中断,只有当协程主动让出控制权时,才会切换到其他协程。
- 适合 I/O 密集型任务:协程非常适合 I/O 密集型的任务,因为它能够在等待 I/O 操作时让出执行权,允许其他任务继续执行。
线程与协程
- 协程可以看作线程的细分,即该线程何时执行操作;
- 协程的切换比线程更轻量,因为它们不需要操作系统进行上下文切换,节省了大量的系统资源;
- 协程是由程序控制的,而线程由操作系统调度;
- 协程强调“协作”,即主动让出控制权,适合密集但不重度的任务,例如密集I/O;