< 返回版块

hzqd 发表于 2021-02-22 23:46

我发现很多时候人们混淆了并发与并行。 我理解的 async await 是并发,但总有人和并行相提并论。

何时该用并发,何时该用并行,这是一个问题。 大家是如何运用并发与并行的呢?

评论区

写评论
Ryan-Git 2021-02-23 11:45

future 返回 not ready 让出当前 cpu 给其他 future 运行是并发。 多核同时运行多个 future 是并行。

个人不觉得 async await 能和其中任何一个划等号。

Aya0wind 2021-02-23 11:44

async await并没有规定底层要并发还是并行,单线程还是多线程,对用户来说async await只是一个发起和等待异步任务的工具,关注底层是怎么做的那是写异步运行时的人要考虑的,像tokio就是底层用了线程池然后多个线程并行的,用户发起任务之后把任务按负载分配到不同线程的任务队列去,这必然是并行执行的。但是你依然可以让同样的代码换其他只能单线程的异步运行时(tokio也可以设置线程数),这样又变成并发了。所以断言async await就是并发或者并行是没有意义的,决定这个的应该是运行时而不是async await语法。

Mike Tang 2021-02-23 00:10

并发是对业务来说,并行是对计算来说。

其实绝大部分情况下并不用过分关注这个问题。

比如,async 编程,tokio自动为你处理,不管是在一个核上的并发调度,还是多核上的并行调度,都是内部已经实现了的,对上层业务,不需要关心。

目的就是把机器性能压榨到最大,不是么?

那种纯计算项目,是需要关注并行化的。

1 共 3 条评论, 1 页