我看了 Python
的协程库 greenlet
的实现,是通过 c
+内联汇编修改寄存器实现的无感知的函数帧栈的切换。
那 go
、java
、rust
等等高级语言是如何实现的?难道有不用汇编直接操作寄存器吗?
更新问题:没有内联汇编,go、java等语言如何实现有栈协程
我看了 Python
的协程库 greenlet
的实现,是通过 c
+内联汇编修改寄存器实现的无感知的函数帧栈的切换。
那 go
、java
、rust
等等高级语言是如何实现的?难道有不用汇编直接操作寄存器吗?
更新问题:没有内联汇编,go、java等语言如何实现有栈协程
2 回答5.2k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
关于 Rust 如何实现协程,得益于 Rust 强大的类型机制,通过在编译时对
async/await
进行语法上的展开,生成匿名的Future
,并且把这些实现了Future
类型的通过第三方的执行器调度。