concurrency(并发) vs parallel(并行)

845 阅读2分钟

最近又看到了这个问题,然后发现自己还是分不清这两个到底有什么区别,于是乎google了一番扫扫盲。

concurrency

俗称并发,或者更贴切的说是 context switching, 有效解决了单核CPU 下的多任务问题。

因为是单核,所以一次只能执行一个程序,高并发的机制就在于他会存储当前任务的上下文,然后暂停这个线程上的任务去执行另一个线程上的任务,这样反复切换,由于切换的速度很快,所以会给人一种同时执行的错觉,所以要记住:concurrency下的多任务不是同时发生的,只是看起来像,下面来说说parallel

parallel

俗称并行,能够并行执行任务的基础那就是多核CPU,多核就意味着能够同时做多个计算,所以这个模型就很简单

把多个任务交给多个cpu去同时处理,并行的多任务是在同时进行的

一个小的帮助理解的🌰: concurrency: 柜台只有一个收银员,顾客排成两队结账 parallel: 柜台有四个收银员,顾客排成四队去结账 如果感觉不够生动的话,可以把收银员想象成闪电侠⚡️

parallel concurrency

其实由上图我们也可以知道,并行和并发可以结合的,在多核cpu下,每个cpu也可以选择并发执行任务来提升执行效率,具体就看使用场景

how them works in Javascript

众所周知,js是单线程语言,js语言本身访问不了线程的,但是它的runtime——浏览器、node环境是基于C/C++的,所以他们是能够操作线程的,所以通过这种方式可以实现concurrency/parallel的

Promise.all

Promise.all 是js批量处理异步任务的api,那么它是concurrency 还是 parallel呢? 答案很简单,单核cpu下concurrency处理,多核cpu下parallel处理

参考文章

anotherdev.xyz/promise-all…