Ruby Ruby 有协程吗?

msl12 · October 08, 2022 · Last by fire replied at October 15, 2022 · 1243 hits

Ruby 有协程吗?😀

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

Reply to martin91

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

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

Reply to msl12

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

一些有趣的问题

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

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

Reply to Mark24

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

Reply to msl12

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

文档:

Conf:

Reply to msl12

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

Reply to msl12

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

Reply to Mark24

thanks

Reply to xrlin

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

You need to Sign in before reply, if you don't have an account, please Sign up first.