Ruby Ruby 有协程吗?

msl12 · 2022年10月08日 · 最后由 fire 回复于 2022年10月15日 · 1301 次阅读

Ruby 有协程吗?😀

fiber 就是,只是好像没什么人用

martin91 回复

Ruby 一般用的还是多线程咯?

听说在 Ruby 进程中,就算是用的多线程的写法,实际上只会有一个真实的线程在运行 如果是这样的话,貌似就算协程了吧

msl12 回复

不是的,ruby 的多线程你可以当作是多个线程争抢一个单核的 cpu 资源,线程还是要经过操作系统调度的,而协程是单个线程一直在执行,但是由调度器在不同的代码块跳转执行,没有产生多余的线程。

一些有趣的问题

  • 既然有系统线程了,为什么还要搞协程
  • 为什么叫协程
  • 对编程有什么影响
  • 怎么实现的
xrlin 回复

哦哦 大概懂了 如果是由操作系统调度的话 那确实跟协程不一样

Mark24 回复

Ruby 3 能够做到多线程完全利用多核了吗

msl12 回复

Ractor 的目标就是利用多核。计算密集任务且任务之间不依赖可以跑满多核心。 虽然还没有正式,但是已经可以用了。我也试过能跑满。

文档:

Conf:

msl12 回复

😀 哈哈,你之前不是搞 java 了吗,现在换了 ruby 的工作?

msl12 回复

Ruby1.9 以后的线程是操作系统中真实的线程实体。

Mark24 回复

thanks

xrlin 回复

是滴,解释很清楚,协程是存在于线程中的,协程的调度是由程序员决定的,协程的切换相当于函数调用,比线程切换的开销更小。在 Python 里面用的比较多,因为 Python 和 ruby 都有全局解释器锁(多核 CUP 同一时刻也只有一个线程在执行),所以可以通过多进程 + 协程来提高效率。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号