Coroutines, like threads, don't require changes to the programming model, which makes them easy to use. Like async, they can also support a large number of tasks. However, they abstract away low-level details that are important for systems programming and custom runtime implementors.
评论区
写评论👍🏻
--
👇
Aya0wind: rust的async await也是可以用来实现协程的,tokio就是一个无栈协程库,不要换了个马甲就不认识了。
协程是进行异步操作的其中一种方式,这两个根本不是一个维度上的东西,怎么比较?
异步的价值应该是跟同步对比,而不是跟协程对比,协程应该跟比如线程池,IO多路复用,AIO等其他的异步机制对比。
rust的async await也是可以用来实现协程的,tokio就是一个无栈协程库,不要换了个马甲就不认识了。
协程是进行异步操作的其中一种方式,这两个根本不是一个维度上的东西,怎么比较?
异步的价值应该是跟同步对比,而不是跟协程对比,协程应该跟比如线程池,IO多路复用,AIO等其他的异步机制对比。
你对异步/协程的理解可能跟大多数人有偏差
协程(Coroutine)是实现异步(Asynchronous)的一种方式,Golang的goroutine是stackful coroutine, async/await是stackless coroutine
异步是现象,协程是产生现象的方式
--
👇
heliping: 我的理解是这样:
协程: 主进程在启动协程之后,协程和主进程再无关系,两者可以通过channel通信,但协程已经单干了。 主进程结束后,如果没有等待锁,协程也一同完成。底层怎么实现不讨论。
异步: 主进程碰到异步后,如果异步任务阻塞,先做其他的事情,返回来再做之前阻塞的任务,多个任务之间切换。
--
👇
Cherrs: 难道是我的理解不对吗,协程不是实现异步的一种封装吗?
https://rust-lang.github.io/async-book/01_getting_started/02_why_async.html
可以看下async-book的说法,异步也是一种并发模型但有更多的细节信息。
我的理解是这样:
协程: 主进程在启动协程之后,协程和主进程再无关系,两者可以通过channel通信,但协程已经单干了。 主进程结束后,如果没有等待锁,协程也一同完成。底层怎么实现不讨论。
异步: 主进程碰到异步后,如果异步任务阻塞,先做其他的事情,返回来再做之前阻塞的任务,多个任务之间切换。
--
👇
Cherrs: 难道是我的理解不对吗,协程不是实现异步的一种封装吗?
难道是我的理解不对吗,协程不是实现异步的一种封装吗?
确实,但是我的意思是,协程也可以解决啊,而且不考虑开销的话,协程更好理解。
而现在rust正火的tokio库,主推异步。
golang没有异步,协程写起来非常方便。
rust圣经如下表述,都是支持的,但是现在好像都把尽力放到异步上面去了。
--
👇
Easonzero: 因为大量的业务逻辑/硬件通信本质需要的就是异步, 比如超时逻辑, 而一个异步框架能够降低这些需求的实现复杂度
因为大量的业务逻辑/硬件通信本质需要的就是异步, 比如超时逻辑, 而一个异步框架能够降低这些需求的实现复杂度
比如tokio,你可以只开rt future不开启rt-multi-thread future。这样就是单线程了 但他还是异步
--
👇
Cherrs: 协程可以多线程,async/await也可以单线程 异步不等于多线程
协程可以多线程,async/await也可以单线程 异步不等于多线程