并发和并行的区别
并发(Concurrency)
定义:并发是指在一段时间内,多个任务可以交替执行的能力。这些任务可能并不是同时执行的,而是通过快速切换(上下文切换)来共享处理器时间,从而给人一种同时执行的错觉。
特点:
- 交替执行:任务在时间上交替执行,而不是同时执行。
- 资源共享:多个任务共享同一资源(如
CPU
时间片)。 - 提高响应性:通过并发,可以提高系统的响应性,即使在等待
I/O
操作或计算密集型任务时,其他任务也可以继续执行。
应用场景:
- Web 服务器:处理多个客户端请求。
- 操作系统:管理多个进程和线程。
- 异步编程:JavaScript 的
Promise
和async/await
。
并行(Parallelism)
定义:并行是指多个任务在同一时间点上真正同时执行的能力。这通常需要多个处理器或多个核心来实现。
特点:
- 同时执行:任务在同一时间点上同时执行。
- 资源独立:每个任务通常有自己的资源(如
CPU
核心)。 - 提高吞吐量:通过并行处理,可以显著提高系统的吞吐量和性能。
应用场景:
- 高性能计算:科学计算、大数据处理。
- 多核处理器:利用多核处理器的并行计算能力。
- GPU 计算:图形处理单元(
GPU
)的并行计算。
协程
TIP
协程,英文 Coroutines
,是一种基于线程之上,但又比线程更加轻量级的存在,因为是自主开辟的异步任务,所以很多人也更喜欢叫它们纤程(Fiber
)。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。具有对内核来说不可见的特性。为了更高效率的利用线程,而不是频繁的创建线程 销毁线程 以及CPU频繁的切换上下文,不能让线程闲着。
进程的三种状态
进程的状态三种基本状态三种基本状态:就绪态、执行态、阻塞态。 这三种基本状态每个 OS
中都会有的,因些称为基本态,下面是给出三种基本状态的定义:
- 就绪(
Ready
)状态 通过Ready
我们可以看到,处于此状态的进程已经处于准备好要运行了。 此时进程已经分配好除CPU
外的所有必要资源,只需要获得CPU
,便可立即执行。处于就绪态的进程都是在就绪队列中,等待着调度程序的调度(分配CPU
)。 - 执行(
Running
)状态 处于此状态的进程是已经获得CPU
且正在执行中。 对于这一状态,在单CPU OS
中,同一时刻只能有一个进程处于此状态,而在多CPU OS
,则可以有多个(不超过CPU 的数量)进程同时处于执行状态。 - 阻塞(
Block
)状态 处于此状态的进程是因为在执行的过程中由于发生某种需要等待的事件(I/O
请求,申请缓存失败,等待接收数据等),而暂时无法继续运行。在多道批处理系统中,此时需要进程把处理机释放,并选取新的就绪进程执行。与就绪队列相对应的,处于阻塞状态的进程都在阻塞队列中,某些OS
中,出于提高效率的目的,根据阻塞的原因,会有多个阻塞队列。