nodejs es7后开始支持async/await语法,原理是,当js引擎运行到io时,像异步代码一样切换到其他代码栈运行,当io完成后再运行await后面的代码,本质上是单线程的。
今天我看到rust语言也有这个语法,是一种无栈协程,但rust没有单线程的限制,那rust这个语法的运行原理跟node js是不是不太一样?
nodejs es7后开始支持async/await语法,原理是,当js引擎运行到io时,像异步代码一样切换到其他代码栈运行,当io完成后再运行await后面的代码,本质上是单线程的。
今天我看到rust语言也有这个语法,是一种无栈协程,但rust没有单线程的限制,那rust这个语法的运行原理跟node js是不是不太一样?
10 回答11.1k 阅读
7 回答5.3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
Rust 与 nodejs async 运行原理一样不一样不肯定, 因为没有看过Rust,nodejs,async的runtime所以不敢肯定,下面是Async Rust一些情况
Language and library support
While asynchronous programming is supported by Rust itself, most async applications depend on functionality provided by
community crates
. As such, you need to rely on a mixture of language features and library support:crates 相当于 npm中的packages;traits是接口的意思,相当于golang中的interface;
Rust语言本身定义了一些关于async的一些类型,函数,接口,比如 async,await这些关键子属于语言本身,但是 rust 并没有实现 async runtime;runtime 是由社区的 Tokio 以及std 中的async-std 实现的。
Refs:
State of async rust
Meet async/await in Swift