问题标签 [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 回答
387 浏览

c++ - 为纤维设计高效的 C++ 代码

如何在我的游戏代码中最好地利用纤维?它应该只用于在加载资源(即磁盘文件)时管理非抢占式上下文切换吗?或者我是否允许所有类型的游戏实体在光纤中运行?我该如何安排?

非常感谢 C++ 或伪代码示例!

0 投票
1 回答
976 浏览

setjmp - 使用信号处理程序和 setjmp/longjmp 实现抢占式微线程

我想在 Linux 环境中实现符合 POSIX 标准的微线程。基本思路如下:

  1. 使用此处描述的技术,为每根光纤分配新的堆栈空间。
  2. 使用 setitimer,创建将在恒定时间间隔内发送信号的计时器。此计时器的信号处理程序将充当调度程序并在光纤之间切换。

问题是,在信号处理程序中执行 longjmp 不会终止处理程序,因此内核将等待它的终止,而不是传递新信号。这使得切换上下文变得不可能,因为没有信号可以启动切换。一种解决方案是取消阻塞 SIGALRM,这样许多信号可以同时执行处理程序,但这会导致竞争条件问题。

实现抢占式微线程的最佳和最简单的方法是什么?我在谷歌上找到的所有例子都不是先发制人的。

0 投票
1 回答
1050 浏览

c# - Best way to deal with sleeping in event handlers in a single-threaded API?

I'm using a non-threadsafe event API. wait() is called, and from that call, event handlers are dispatched. I want to be able to, within an event handler, "sleep" for some time. Currently, I have a scheduler that schedules functions to be called at a later time, and have a bit of a hack that lets me use Scheduler.Sleeper(some_ienumerator) as the event handler, so I can yield timespans as a sort of sleep. Is there any better solution? If C# had Ruby-style Fibers, I would be able to make the scheduler have a Sleep() function that I can call, and the sleep stuff could be in a function called by the event handler, rather than the handler directly. Given the lack of easily-usable Fibers, is there anything else I can do?

EDIT FOR CLARIFICATION: I call wait(n) where n is an amount of time, and during that wait call, the API calls the event handlers. The reason I want to "sleep" in some of those handlers is because this is for a game, where after clicking on something, an object might, for instance, glow for a second.

0 投票
3 回答
818 浏览

ruby - 简单的 neverblock 示例不起作用

我正在尝试用“neverblock”做一些事情,但我似乎无法让它发挥作用。
我的期望:阻塞睡眠不应该减慢整个过程。我预计会看到 5 次具有基本相同时间戳的“bla”。

红宝石:

代码:

结果:

0 投票
3 回答
3796 浏览

ruby - Ruby Fibres 可以并发吗?

我正在尝试加快我的程序的速度,并且有人告诉我 Ruby Fibers 比线程快,并且可以利用多个内核。我环顾四周,但我就是找不到如何实际同时运行不同的光纤。使用线程,您可以这样做:

我看不出如何用纤维做这样的事情。我所能找到的只是yieldresume这似乎只是纤维之间的一堆开始和停止。有没有办法用纤程实现真正的并发?

0 投票
1 回答
371 浏览

ruby - Ruby 中的状态机使用 Fibers?

我正在尝试处理FiberRuby 1.9 中的新类,并且我读到Fibers(和协程)更常见的应用程序之一是在状态机中。

不幸的是,我的Fiber-fu 不太好,所以我希望你们中的一个可以向我展示一个使用Fibers的 Ruby 中的简单状态机示例

谢谢 :)

0 投票
2 回答
1825 浏览

python - Python 中的纤维

我正在寻找一种非常简单的方法来在 Python中实现纤维。我确信有一个非常简单的方法可以使用生成器来完成它,但我的脑子里正在胡思乱想。这不适用于大型应用程序,所以我不需要像 Diesel、Tornado 或 Twisted 这样的花哨(或开销),我只想要一种巧妙的小方法来制作纤维。有什么想法/建议吗?

0 投票
1 回答
518 浏览

ruby - Nokogiri vs Goliath……或者,他们可以相处吗?

我有一个项目需要从字面上解析数十万个 HTML 和 XML 文档。

我认为这将是学习 Ruby 纤维和新的 Goliath 框架的绝佳机会。

但显然,如果您使用阻塞库,Goliath 就会失败。但问题是,我不知道如何判断什么是“线程安全”(如果这甚至是 Goliath 的正确术语)。

所以我的问题是,Nokogiri 是否会对 Goliath 或多线程/光纤造成任何问题?

如果是这样,有没有比 Nokogiri 更安全的东西?

谢谢

0 投票
0 回答
408 浏览

ruby - 为什么在 Ruby 1.9 中延续是邪恶的?

我在 Ruby 世界中相对较新。我不知道,该怎么想。在“Ruby 编程语言”中,我读到我不应该在新代码中使用 Continuations 而是使用 Fibers。我发现了这个演示文稿(从 2008 年开始)http://www.atdot.net/~ko1/pub/ContinuationFest-ruby.pdf它说 Continations 被破坏了,他们的 Ruby 实现的创建者是罪犯。另一方面,我阅读了一些博客,其中作者对延续感到兴奋,而他们对延续错误并不感到难过。所以我不知道该怎么想。我知道使用 Fibers 而不是 Continuations 更好,但是当 Fibers 不够时该怎么办?我可以使用 Continuations 还是它们坏了(2008 年的演示文稿这么说)?为什么 Matz 将 Continuations 踢到 stdlib?为什么有票,他会把它踢出鲁比?

0 投票
2 回答
321 浏览

ruby - 无限红宝石纤维?

是否可以创建 2 个永远相互调用的 Ruby 纤维?Ruby 最终会因堆栈溢出而崩溃,还是 Fiber 不会占用堆栈空间?