Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程
1 引言 并发、并行、串行、同步、异步、阻塞、非阻塞、进程、线程、协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念。 2 并发与并行 在解释并发与并行之前,我们必须先明确: 单个处理器(一个单核CPU)在某一个时刻只能处理一个线程 。 并发是指在同一个处理器上通过时间片轮转的方式在多个线程之间频繁切换,由于切换速度极快,所以看似多个线程似乎被同时执行,但实际上每一个时刻都只有一个线程被执行,其他的线程出于阻塞状态。 并行是指多个处理器在同一时刻同时处理了多个不同的线程,这才是真正意义的同时被执行。 如下图所示,线程A与线程B同在一个CPU内执行,且任一t时刻内,都只有一个线程(A或者B)被执行,所以线程A与线程B是并发执行的。线程C和线程D分别在两个CPU内执行,且在某一个t时刻内同时都在执行,所以线程C和线程D是并行的。 3 并行与串行 上面已经说到,并行是指多个任务同时执行,而 串行 是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。 所以,并发与并行是在某一时刻是否都在执行的区别。并行与串行是同时进行或一个结束才进行下一个的区别。 4 同步与异步 同步与异步的概念与消息的通知机制有关: 同步 是指线程在访问某一资源时,获得了资源的返回结果之后才会执行其他操作