0%

Java-并发篇-1

https://www.zhihu.com/question/22950899

并发,并行和串行

并发是指系统在同一时间段可同时处理多个任务,而同一时刻只有一个任务处于运行状态,和并发有两个接近的概念很容易被混淆,串行和并行,串行、并发和并行是相对于进程或多线程来说的。如下图是串行、并发和并行的执行时间图。

3者区别

串行

串行比较好理解,如上图所示串行是指线程A完成之后做线程B,以此类推,直到完成线程C。

并发

并发和并行的区别

并发是指一个或若干个 CPU 对多个进程或线程之间进行多路复用。简单说线程A先做Task,工作一段时间,线程B再做Task;
线程B执工作一段时间线程C再做Task,线程C工作一段时间,线程A重新执行Task。
以此类推,直到工作完成,看上去像是三个线程同时一起执行,但其实完全可以交给一个线程执行

对于并发来说,线程A先执行一段时间,然后线程B再执行一段时间,接着线程C再执行一段时间。每个线程都轮流得到 CPU 的执行时间,并发只需要一个 CPU 即能够实现, 线程利用率最优。

并行

并行则是指多个进程或线程同一时刻被执行,是真正意义上同时执行,并行必须要有多个 CPU

并行是A、B和C三个线程同时执行一个或多个Task,每线程负责一项Task,A、B和C三线程在同一时刻齐头并进地完成这些事情。

并行比串行和并发时间开销要小,但是由于线程A、线程B和线程C是同时执行的,需要三个 CPU 才能实现,一定程度影响机器性能。

总结

3者工作流

串行是一个时间段内多个任务执行时,一个任务执行完才能执行另一个。
并行是指一个时间段内每个线程分配给独立的核心,线程同时运行。
而并发指的是一个时间段多个线程在单个核心运行,同一时间只能一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。