问题标签 [event-loop]

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 回答
346 浏览

timer - Dart:使用零持续时间计时器是支持将工作推迟到事件循环的方式

我通过实验发现创建一个持续时间为 0 的计时器可以让我将工作推迟到事件队列中。我真的很喜欢这个功能,因为它可以避免很多讨厌的重入问题。这是不会改变的故意功能吗?可以添加到文档中吗?如果没有,是否有支持的方法来做到这一点?

0 投票
4 回答
1978 浏览

node.js - 如何避免需要将事件发射延迟到事件循环的下一个滴答声?

我正在使用全局事件发射器编写 Node.js 应用程序。换句话说,我的应用程序完全围绕事件构建。我发现这种架构对我来说非常有效,除了我将在此处描述的一个侧面案例。

请注意,我认为回答这个问题不需要 Node.js 知识。因此,我会尽量保持抽象。

想象以下情况:

  • 全局事件发射器(称为mediator)允许各个模块侦听应用程序范围的事件。
  • 创建一个 HTTP 服务器,接受传入的请求。
  • 对于每个传入的请求,都会创建一个事件发射器来处理特定于该请求的事件

传入请求的示例(纯粹是为了说明这个问题):

到目前为止,一切都很好。现在可以通过识别请求的 URL 并发出适当的事件来扩展此应用程序:

在此之后可以编写一个处理根请求的模块。

看起来不错,对吧?实际上,它可能是损坏的代码。原因是该行emitter.emit('root')可能在该行之前执行emitter.once('root', ...)。结果是监听器永远不会被执行。

root可以通过将事件的发射延迟到事件循环的末尾来处理这种特定情况:

这样做的原因是因为发射现在延迟到当前事件循环完成,因此所有侦听器都已注册。

但是,这种方法存在很多问题:

  1. 这种基于事件的架构的优点之一是发射模块不需要知道谁在监听他们的事件。因此,没有必要决定是否需要延迟事件发射,因为人们不知道要监听什么事件以及它是否需要延迟。
  2. 它显着地使代码混乱和复杂化(比较两个示例)
  3. 它可能会降低性能

因此,我的问题是:如何避免将事件发射延迟到事件循环的下一个滴答声,例如在所描述的情况下?

更新 19-01-2013

一个说明此行为为何有用的示例:允许并行处理 http 请求。

如果每个事件json.parsed都会发出原始请求,那么上述情况是不可能的,因为每个事件都与另一个请求相关,并且您无法侦听针对特定请求并行执行的操作组合。

0 投票
1 回答
1032 浏览

c - ANSI C 兼容的事件循环

是否有 ANSI-C 兼容的事件循环,例如 libev 或 libevent?我的要求是使用 -ansi 标志进行编译。

谢谢你。

0 投票
1 回答
432 浏览

python - TideSDK 和 Python 中的长处理循环

有没有办法在 Python 中进行长时间的处理循环而不用 TideSDK 冻结 GUI?或者我只需要使用线程......

谢谢。

0 投票
1 回答
217 浏览

events - 在 Go 中监听事件的惯用方法是什么?

几个月前,我在考虑如何在 Go 中为 RPC 库实现可关闭的事件循环。我设法促进像这样关闭服务器:

我发现这个实现的问题是它涉及超时,这意味着最短关闭时间比它可能的时间多 2 秒。有没有更惯用的方法来创建事件循环?

0 投票
1 回答
195 浏览

multithreading - 在基于事件驱动/事件循环的程序中为每个回调设置截止日期

在典型的 ASIO 或 libevent 等基于事件的编程库中,有没有办法为每个回调设置截止日期?

我担心回调中可能出现无限循环。有没有办法优雅地检测它们,从任务队列中删除行为不端的回调并继续处理队列中的其他任务?

我可以想办法通过外部线程来检测它并杀死事件循环线程并创建一个不同的线程,但我想看看是否有其他常用的方法。我相信这是某人在某个时间点遇到过并通过解决方案思考的问题

0 投票
1 回答
2827 浏览

javascript - Node.JS : forEach vs for loop Asynchronous nature

In the above function , the expected nature of running it in for loop is logging of 50 50times ? But with forEach it does log 1 2 3 ....

Both these implementations look same but does really different tasks The first function calls all the async functions with 0 to 50 as params but doesn't really wait for the callbacks to complete

But the second one (in one of my projects) seems to wait for callback and proceed to next item in the array?

Are they both same?

0 投票
2 回答
79 浏览

node.js - 保持 Node.js 异步的问题

所以,我今天遇到了一种情况,我需要将异步数据库调用放入我的自定义函数中。例如:

然后我从程序中的另一个点调用它。首先,为了安全起见,这仍然是异步的吗?(我会假设这是为了继续我的问题)。我想从这里做的是在异步数据库调用完成时调用另一个特定的函数。我知道数据库调用将在完成时触发回调函数,但问题是这个自定义函数非常通用(意味着它将在我的代码中从许多不同的点调用),所以我不能在回调中放置特定的方法调用功能,因为它不适合所有情况。如果不清楚我在说什么,我将在下面提供一个我想做的例子:

我怎样才能使上述情况起作用?

谢谢。

0 投票
1 回答
459 浏览

java - Java 事件循环,“轻轻”睡眠

我正在做一种事件循环来处理 Java 中的多个非阻塞套接字。问题是当我保持循环不变时,它使用了整个核心。(例如,我有一个四核,每次启动程序时,CPU 每次都会跳到 25%。)

我知道我可以使用 Thread.sleep() 来减慢处理器的使用速度,但我想知道是否有合适的方法来做到这一点。我觉得 Thread.sleep(1) 可能会限制我的事件循环。

所以我的问题是,我该怎么做?有正确的方法吗?我应该降低线程的优先级吗?我应该使用 Thread.sleep(0, someNanosecondsAmount) 吗?

0 投票
1 回答
153 浏览

c++ - 访问 .net 表单主循环,或每帧触发的事件

我使用 API 制作了一个应用程序,允许我创建自己的事件循环。我正在尝试使用 .NET 表单来转换此应用程序以获得相同的效果。它基本上看起来像这样:

是否可以访问表单的主循环?

或者是否存在每帧触发的事件?有了这个,例如,我可以计算每秒的帧数。此事件不必由 Form 调用,甚至可能由 System 调用,因此您甚至可以将它们与服务、应用程序和 Web 一起使用。

谢谢