【问题标题】:Are threads coming to opal?螺纹会变成蛋白石吗?
【发布时间】:2014-10-13 12:56:46
【问题描述】:

所以,我读到here,我们无法从 javascript 访问线程。但这不是真的,不是吗?我们确实有某种来自 javascript 的线程支持(使用工人?)。这不是不可能的。这是问题还是我误解了什么?

【问题讨论】:

    标签: opalrb


    【解决方案1】:

    目前没有计划通过工作线程实现线程,尽管标准库可能会接受拉取请求。

    现在有 shims 允许从 gems 中简单使用,您可以在此处查看代码:

    https://github.com/opal/opal/blob/master/stdlib/thread.rb

    【讨论】:

    • 所以,我检查了网络工作者。现在似乎无法使用它们。 webworkers 无权访问 DOM。他们甚至不能与他们范围之外的任何对象进行交互。您说可以从宝石中使用它们。我们可以在浏览器中使用它们吗?
    • 我链接的垫片只是为了让依赖 Thread.current 的 gem 工作。 Thread.new 引发 NotImplementedError。所以你可以在浏览器中使用垫片,但不能使用真正的线程。平台(浏览器)不支持它,就像 CRuby 不支持 windows 上的“fork”一样。
    • 也许另一种选择是使用我们在标准库中的“承诺”实现,请参阅相关博客文章以获取教程opalrb.org/blog/2014/05/07/promises-in-opal
    • 甚至不知道 Promise。是的,使用 Promises 和 Generators 应该是可行的。我将尝试使用它们在 js 中实现 Fiber 类。当我有结果时会回信。
    • Fibers 只需使用生成器即可轻松实现。解析应该与目前发生的情况略有不同。 ruby 中的 Fiber 实例化如下:Fiber.new do [|params|] ~Fiber Code~ end 解析代码后应如下所示:Opal.Fiber.$new(function*(params){ ~Fiber Code~ }) 此外,如果函数中有 Fiber.yield,则应使用 function* 而不是仅使用 function 创建。还有其他地方可以讨论吗? cmets 中的格式不够好。
    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    相关资源
    最近更新 更多