问题标签 [fibers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - 在异步方法上恢复光纤
我无法理解,为什么这段代码不起作用。我想做的是使用光纤模拟同步代码行为。
当我运行此代码时,输出为:
光纤永远不会恢复。你能解释一下我该怎么做吗?
多谢你们
javascript - Node.js meteor.js 纤维和循环
好的,我正在学习光纤,但我不知道如何实现“等待光纤内的循环结束”
现在我有了这段代码,没有问题。
我需要更换setTimeout ... FOR ...
重点是首先检查我是否已经拥有项目(自己的项目是真的)然后我可以做任何我想做的事情,但我需要确保 ownItem 是真的
ruby - 纤维与显式枚举器
我正在玩弄 Ruby 来学习这门语言。目前,我正试图围绕纤维的概念展开思考。根据这个答案,它们经常用于创建(无限)外部枚举器。另一方面,这似乎与所谓的显式枚举器的概念重叠。
说,我想编写一个触发连续素数的代码片段(是的,以下算法的运行时间为 O(scary))。我可以通过使用纤维来实现它:
它本身不会发出枚举器对象,尽管从中创建一个并不困难。相比之下,我还可以使用显式定义的枚举器,它具有已经成为枚举器对象的额外好处:
这两种方法都允许我实现某种协同程序,而且它们对我来说似乎是可以互换的。那么我什么时候更喜欢其中之一呢?有一些普遍认可的做法吗?我觉得很难把所有这些成语都记在心里,所以如果这被认为是一个愚蠢的问题,我提前道歉。
ruby - 使用 Fibers 创建 REPL
我正在尝试使用 Ruby 的 Fibers 创建一个 REPL,其中一根 Fiber 作为前端 - 接收输入并显示输出 - 一根 Fiber 作为后端 - 处理来自前端的输入并返回输出以供显示。
(我这样做部分是因为我隐约需要一个 REPL,部分是因为我想了解 Fibers,部分是因为我认为这将允许测试 - 只需替换测试框架中的前端来测试后端,反之亦然) .
麻烦的是,我找不到任何关于如何实际使用完整的 Fibers 库的好的文档,而且我最初的猜测是行不通的。所以,我有四个问题:
- 这是一个半明智的想法吗?尝试从 Fibers 制作 REPL 时我会遇到巨大的麻烦吗?
- 如果没有 Fibers 库,我认为我无法做到这一点,因为我需要双向传递值。那正确吗?
- 任何人都可以指出关于 Ruby Fibers 的体面的、入门的教程或文档(如在库中,而不是单向生成器的东西)?
- 为什么以下不起作用?正确显示
Enter a string:
,并反复接受输入;但每次我提供一行输入时,它只会显示第一行输入反转(包括示例输出,以防不清楚)。
代码:
输出:
ruby - Sinatra + Fibers + EventMachine
我想知道在红宝石中暂停根纤维(如果可能的话)。
我有这个 Sinatra 应用程序,我正在使用 EventMachine 对外部 API 进行异步调用。在 api 响应我之前,我不想响应客户端。
例如,在 Sinatra 中休眠 Root Fiber,直到 EventMachine 回调将其唤醒。
谢谢。
asynchronous - Sinatra 中的光纤和多个 http 请求
我无法理解使用带有 eventmachine 的纤维模型调用外部 API 时发生的情况。我在 Sinatra 中有这段代码:
此外,我正在使用:EventMachine
具有 2 个连接的连接器启动 Rainbows 服务器(这意味着 2 个光纤一次处理 2 个 http 请求)。
现在,如果我发出 4 个并发请求,应用程序首先应该管理 2 个,当进行外部 API 调用时,这些纤程应该能够在等待外部调用完成时管理 2 个新的 http 请求,对吧?
这没有发生。在 slowapi 调用返回并释放 Fiber 之前,不会接受新的 http 请求。
这是正确的行为吗?我错过了什么吗?谢谢。
ruby - EM::Synchrony.defer 与光纤感知数据库调用导致 FiberError 异常
我正在尝试在应用程序中使用 EM-Synchrony 进行并发,但在使用延迟代码和 Fibers 时遇到了问题。
在 EM.defer 或 EM::Synchrony.defer 中对数据库的任何调用都会导致应用程序因错误而崩溃can't yield from root fiber
下面是我正在尝试完成的一个非常精简的可运行示例。第一个打印工作并显示[:first, 1]
,但第二个是我因上述错误而崩溃的地方。
我的第一个想法可能是 EM::Synchrony.defer 中的 Fiber.current 和 Fiber.yield 意味着我可以通过额外的 Fiber.new 调用来解决问题
这也无法运行,但这次我得到了错误fiber called across threads
。
ruby - 如何在非机架中使用带有 ruby eventmachine 的光纤?
所以基本上我的目标是获得某种轻量级的 ruby 守护程序(或 sidekiq/resque worker),它处理作业并通过 http 通知其他应用程序。应用程序本身不需要接收 http 请求,因此没有机架可以保持尽可能轻量级。我可以在循环中运行相当多的 ruby 代码{}
所以尽量不使用 EventMachine 的反应器模式,而是使用光纤方法。在这种情况下,我会将 EM.run 或 EM.stop 放在哪里Thread.new { EM.run }似乎没有纤维意识,所以添加它不会产生回调?有没有一个em-synchrony替代方案?
ruby - 如何在 EventMachine 中运行同步长时间运行的操作而不阻塞反应器?
我想以指定的顺序运行一系列Proc
s(即它们不能异步运行)。其中一些可能需要任意长的时间。
我的代码在 EventMachine 反应器的上下文中运行。是否有一个已知的习惯用法来编写这种代码而不阻塞主反应器?
node.js - 我如何使用 mongo-sync?
我从 git 获得了mongo-sync,然后尝试使用自述文件。
我像这样编写test.js:
我common-node test.js
用来跑步
然后我得到了回报:
我的代码有什么问题?
这是 monog-sync/lib/mongo-sync.js 中的代理代码: