我们举个例⼦, 饭店的客户是线程, 菜单是指令, 厨师是cpu。
1、并发(Concurrency)
通俗:并发是多个客户在同⼀时间段内不约⽽同来到饭店,但是都想快点上菜, 却只有⼀个厨 师,厨师想了个办法,给每⼀桌上⼀个菜, 然再轮流炒第2、3....个菜,达到⾬露均沾,不⾄于后 ⾯来的客户闹情绪。
底层和类比:在并发处理中,多个任务在相同的时间段内进行执行,可能会有交叉。这并不意味着同时执行,而是通过快速切换任务的方式,使任务在短时间内交替执行。
类比生活中的例子是,一个人在处理多个任务时,通过快速切换,每个任务都能得到一些进展,但是无法同时处理多个任务。
Task 1 -> Task 2 -> Task 3 -> Task 4
| | |
V V V
Time
2、并行(Parallel)
通俗:并⾏是多个客户在同⼀时刻⼀起来到饭店,没⼈愿意排队, 好办!饭店有多个厨师, 每桌 安排⼀个厨师,⾼档饭店就是好。
底层和类比:多个任务同时执行,每个任务都有自己的处理单元。这意味着同一时间可以有多个任务在同时进行。
类比生活中的例子是,多个人同时处理不同的任务,每个人专注于自己的任务,互不干扰。
Task 1 ------>
Task 2 ------>
Task 3 ------>
Task 4 ------>
|
| Time
V
3、串行(Serial)
通俗:串⾏就很好理解了,按照客户下单顺序, 先到先得, 厨师按菜单顺序炒菜。 但是后⾯的 客户就要等得⽐较久了, 如果第⼀个客户吃的是满汉全席, 后⾯的客户可能就不想等了。
底层和类比:在串行处理中,任务按顺序逐个执行,每个任务必须等待前一个任务完成后才能开始。这意味着同一时间只有一个任务在执行。
类比生活中的例子是,一个人按照列表上的任务一步一步完成,不进行任何交叉或并行操作。
Task 1 -> Task 2 -> Task 3 -> Task 4
综合
通常来说,我们接触较多的是并发和并行的问题,他俩区别主要是:⼀个是交替执⾏,⼀个是同时执⾏。
而并发是逻辑上看似同时执行任务,但是并行则是物理上同时执行任务。