是否可以在多核上运行代码块?对于循环和类似的例子?如果没有太多开销就可以,为什么不一直使用它呢?我能以某种方式跨多个内核传递变量吗?
最佳答案
是的,可以在多个内核上执行代码/ block ,但不是那么简单,例如支持结构必须为此做好准备(Array
、Hash
等核心结构都不是线程安全的)。
你不能简单地 (1..100).each { |i| puts i }
运行多线程,而不会出现与单线程情况下不同(不可预测)的结果。
如果要在线程之间共享,则需要同步访问或使用线程安全结构的情况或变量。
也许在你的情况下我不会从一个绿色领域开始,这些概念和并发编程的一些后台实践可以使用 concurrent-ruby 获得 gem 。
并行运行 block 了解executors/thread-pools
还有 thread-safe structures如果您对线程之间“安全”共享变量感兴趣(CR 试图引入一种内存模型,因为 Ruby 缺少官方模型 - JRuby 有一些保证,例如类变量是易变的 - 跨线程可见的变化)
关于ruby - JRuby 多核处理用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41939295/