问题标签 [fiber]

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 投票
2 回答
308 浏览

java - Quasar暂停执行

我有一个Class名称,它Foo调用. 延伸. 里面有一个调用。现在哪个会停?实例或实例? 签名(它已定义,这是我感到困惑的主要原因):non-staticbarMethod()BarBarFiber
barMethod()park()FiberFooBar

park()static

如果答案是Foo(似乎是这样),我该如何停车Barsuspend (park) Bar我主要是不打算Foo
如果你给我一个关于如何停放Bar实例的答案,那么请告诉我,既然我想停放Bar,不Foo应该barMethod()SuspendExecution吗?它不会被 的任何实例访问Bar,并且我不想Foo在此方法中停放任何实例(仅限Bar)。

还请提供关于 的所有相同问题的答案unpark()。它会应用于当前FiberFoo在这种情况下为实例)还是会影响Bar实例?如果是后者,那么我怎样才能解除Bar实例,而不是Foo实例?

0 投票
1 回答
643 浏览

node.js - 为什么流星不再工作?`throw new Error('`'+ modPath+ '.node` 丢失。尝试重新安装 `node-fibe`

我正在运行 Meteor 1.3.2.4 和 Node v4.4.3 。我所有的项目都不再加载并显示以下错误。起初这是Cannot find modules fibers我做的一个错误,并且meteor build --directory ../build在这里看到了cd .meteor/local/build/programs/servernpm install 。 然后错误变为:

我也尝试在服务器文件夹中卸载和重新安装光纤,但无济于事。

流星似乎在我的笔记本电脑上运行良好,运行相同的版本,而不是我的台式机。

0 投票
1 回答
103 浏览

java - 我可以假设类星体中的 SettableFuture 作为光纤吗?

我可以假设 a在异步代码中SettableFuture充当a 吗Fiber(应该假设为 a ForkJoinTask)?

除了线程之外,Quasar SettableFuture 还可以阻塞光纤。

SettableFuture API
Parallel Universe Comsat 文档

0 投票
1 回答
436 浏览

multithreading - Vibe.D 是多线程来处理并发请求吗?

我知道 Vibe.D 的实现是基于 Fibers。但我不知道 Vibe.D 处理的高负载情况如何。是 Vibe.D 中的调度程序在多个线程上分配纤程还是只为所有纤程分配一个线程?

这个考虑非常重要,因为即使使用 Fibers 的高效率,也浪费了大量的 CPU 时间,只不过是使用一个线程来处理所有传入的请求。

0 投票
2 回答
298 浏览

ruby - Ruby 光纤:恢复传输的光纤

我试图了解以下代码片段的行为。我的重点是Fiber#transfer方法。

我已经用右侧的预期执行顺序对代码行进行了编号。一旦fiber3.resume返回并调用,我希望在标记为#10fiber2.resume的行内继续执行。相反,我收到以下错误:fiber2

这是清单最后一行报告的错误:fiber2.resume.

0 投票
1 回答
178 浏览

multithreading - 我可以通过 D 中的线程池调度 Fibers

我想要的是获得 Fiber 在上下文切换方面的高效率并在 I/O 期间产生 CPU 时间,但是当工作负载足以提供更多 CPU 时,我希望从并行执行的事实中获得性能。

我读了这篇关于线程和纤维的精彩文章 https://octarineparrot.com/article/view/getting-more-fiber-in-your-diet

并阅读有关纤维和线之间比较的问题。 纤维在 D 中的线程

但我想了解一种将它们优雅地混合的好方法。当然,欢迎提供代码示例。

0 投票
1 回答
343 浏览

fiber - 当正在运行的光纤处于阻塞状态时,线程是否可以运行另一条光纤

据我所知,当正在运行的纤程阻塞时,一个线程可以运行另一个纤程。但事实并非如此。我创建了100个纤程,它将搜索solr。我发现的结果是所有纤程都按顺序执行。另一个纤维只有在前一个像线程一样完成时才能执行。这是我的代码。

我误解了纤维吗?

0 投票
1 回答
211 浏览

ruby - Ruby Fiber 程序中的控制流程

我知道纤维是协作线程。纤程可以控制执行上下文,而抢占式线程则不能。光纤可以产生控制,这意味着光纤可以在明确定义的位置开始和停止。

显然,在事件红宝石中使用纤维的原因是为了清理由反应器模式引起的嵌套块。

但是我很难掌握下面使用光纤的脚本的控制流程。

我理解的方式:

1) EM 开始它的事件循环

2)创建一个纤程,然后调用resume。传递给 new 的代码块是立即执行还是在调用 resume 后执行?

3)第一次调用http_get。它执行异步事件(在 linux 上使用 select、poll 或 epoll)。我们设置了异步事件的事件处理程序(在回调方法中)。然后 Fiber 自愿将控制权交给 EventMachine 所在的线程(主线程)。但是,一旦调用回调,它将通过 f.resume(http) 收回控制权。但是在这个简化的例子中,我应该把我自己的回调代码放在 f.resume(http) 之后吗?因为现在看起来 f.resume(http) 只是将控制权返回给光纤,而没有做任何其他事情。

我认为在 yield 之后发生的事情是控件进入 EventMachine 并进入其事件循环。所以第二个 http_get 还没有被调用。现在一旦调用回调,控制权就会返回给 Fiber(我们只使用一个 Fiber.new,所以我假设所有这些中只有一个 Fiber 实例)。但是第二个 http_get 什么时候被调用呢?

0 投票
1 回答
46 浏览

javascript - 诺克斯回调的 Meteor Fiber 问题

我很难理解在我正在处理的代码中应该在哪里实现 wrapAsync/bindEnvironment。我正在使用 http/knox 调用一个 url 并将其上传到我的 S3 存储桶,它可以工作,但是当我尝试在回调中调用该函数时,我遇到了Meteor code must always run within a Fiber.

我试图将回调包装在 bindEnvironment 中并尝试使用 wrapAsync,但一定没有完全理解它是如何工作的。任何指导将不胜感激!

0 投票
4 回答
1508 浏览

java - Quasar Fiber 相当于 Java 的 ThreadPoolExecutor?

我一直对 Quasar 及其轻量级 Fibers 作为 Threads 的替代品感到好奇。在查阅了他们的API 文档后,我无法弄清楚如何将典型的ThreadPoolExecutor转换为 Fibers 池。

上面的代码创建了一个有 10 个线程的池,池前面的一个队列可以容纳 10 个元素和一个拒绝策略(当队列满时)让主线程自己执行一个 Runnable 任务。由于for循环创建了100个runnable,它们将在池中一次执行10个,10个排队,主线程自己拿起一个Runnable,直到其他线程完成,之后主线程返回将Runnables添加到executor。

您将如何使用 Quasar 的 Fibers 来做到这一点?它是不是一开始就应该这样使用?


编辑:我最初的问题措辞不佳。本质上,我试图找到一种机制来限制可以同时运行的 Fiber 数量。例如,如果已经有 200 个 Fiber 在运行,则不要启动更多 Fiber。如果最大数量的光纤正在运行,请等到一个完成后再启动一个新的。