问题标签 [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.

0 投票
1 回答
260 浏览

ruby - 在异步方法上恢复光纤

我无法理解,为什么这段代码不起作用。我想做的是使用光纤模拟同步代码行为。

当我运行此代码时,输​​出为:

光纤永远不会恢复。你能解释一下我该怎么做吗?

多谢你们

0 投票
2 回答
470 浏览

javascript - Node.js meteor.js 纤维和循环

好的,我正在学习光纤,但我不知道如何实现“等待光纤内的循环结束”

现在我有了这段代码,没有问题。

我需要更换setTimeout ... FOR ...

重点是首先检查我是否已经拥有项目(自己的项目是真的)然后我可以做任何我想做的事情,但我需要确保 ownItem 是真的

0 投票
1 回答
482 浏览

ruby - 纤维与显式枚举器

我正在玩弄 Ruby 来学习这门语言。目前,我正试图围绕纤维的概念展开思考。根据这个答案,它们经常用于创建(无限)外部枚举器。另一方面,这似乎与所谓的显式枚举器的概念重叠。

说,我想编写一个触发连续素数的代码片段(是的,以下算法的运行时间为 O(scary))。我可以通过使用纤维来实现它:

它本身不会发出枚举器对象,尽管从中创建一个并不困难。相比之下,我还可以使用显式定义的枚举器,它具有已经成为枚举器对象的额外好处:

这两种方法都允许我实现某种协同程序,而且它们对我来说似乎是可以互换的。那么我什么时候更喜欢其中之一呢?有一些普遍认可的做法吗?我觉得很难把所有这些成语都记在心里,所以如果这被认为是一个愚蠢的问题,我提前道歉。

0 投票
1 回答
184 浏览

ruby - 使用 Fibers 创建 REPL

我正在尝试使用 Ruby 的 Fibers 创建一个 REPL,其中一根 Fiber 作为前端 - 接收输入并显示输出 - 一根 Fiber 作为后端 - 处理来自前端的输入并返回输出以供显示。

(我这样做部分是因为我隐约需要一个 REPL,部分是因为我想了解 Fibers,部分是因为我认为这将允许测试 - 只需替换测试框架中的前端来测试后端,反之亦然) .

麻烦的是,我找不到任何关于如何实际使用完整的 Fibers 库的好的文档,而且我最初的猜测是行不通的。所以,我有四个问题:

  1. 这是一个半明智的想法吗?尝试从 Fibers 制作 REPL 时我会遇到巨大的麻烦吗?
  2. 如果没有 Fibers 库,我认为我无法做到这一点,因为我需要双向传递值。那正确吗?
  3. 任何人都可以指出关于 Ruby Fibers 的体面的、入门的教程或文档(如在库中,而不是单向生成器的东西)?
  4. 为什么以下不起作用?正确显示Enter a string:,并反复接受输入;但每次我提供一行输入时,它只会显示第一行输入反转(包括示例输出,以防不清楚)。

代码:

输出:

0 投票
1 回答
933 浏览

ruby - Sinatra + Fibers + EventMachine

我想知道在红宝石中暂停根纤维(如果可能的话)。

我有这个 Sinatra 应用程序,我正在使用 EventMachine 对外部 API 进行异步调用。在 api 响应我之前,我不想响应客户端。

例如,在 Sinatra 中休眠 Root Fiber,直到 EventMachine 回调将其唤醒。

谢谢。

0 投票
1 回答
216 浏览

asynchronous - Sinatra 中的光纤和多个 http 请求

我无法理解使用带有 eventmachine 的纤维模型调用外部 API 时发生的情况。我在 Sinatra 中有这段代码:

此外,我正在使用:EventMachine具有 2 个连接的连接器启动 Rainbows 服务器(这意味着 2 个光纤一次处理 2 个 http 请求)。

现在,如果我发出 4 个并发请求,应用程序首先应该管理 2 个,当进行外部 API 调用时,这些纤程应该能够在等待外部调用完成时管理 2 个新的 http 请求,对吧?

这没有发生。在 slowapi 调用返回并释放 Fiber 之前,不会接受新的 http 请求。

这是正确的行为吗?我错过了什么吗?谢谢。

0 投票
0 回答
478 浏览

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

0 投票
1 回答
739 浏览

ruby - 如何在非机架中使用带有 ruby​​ eventmachine 的光纤?

所以基本上我的目标是获得某种轻量级的 ruby​​ 守护程序(或 sidekiq/resque worker),它处理作业并通过 http 通知其他应用程序。应用程序本身不需要接收 http 请求,因此没有机架可以保持尽可能轻量级。我可以在循环中运行相当多的 ruby​​ 代码{}

所以尽量不使用 EventMachine 的反应器模式,而是使用光纤方法。在这种情况下,我会将 EM.run 或 EM.stop 放在哪里Thread.new { EM.run }似乎没有纤维意识,所以添加它不会产生回调?有没有一个em-synchrony替代方案?

0 投票
2 回答
903 浏览

ruby - 如何在 EventMachine 中运行同步长时间运行的操作而不阻塞反应器?

我想以指定的顺序运行一系列Procs(即它们不能异步运行)。其中一些可能需要任意长的时间。

我的代码在 EventMachine 反应器的上下文中运行。是否有一个已知的习惯用法来编写这种代码而不阻塞主反应器?

0 投票
0 回答
808 浏览

node.js - 我如何使用 mongo-sync?

我从 git 获得了mongo-sync,然后尝试使用自述文件。

我像这样编写test.js:

common-node test.js用来跑步

然后我得到了回报:

我的代码有什么问题?

这是mongo-sync 的链接

这是 monog-sync/lib/mongo-sync.js 中的代理代码: