问题标签 [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.
c - C中是否有任何简单/示例事件驱动的网络服务器?
网上有许多基于线程的 Web 服务器示例,但我还没有真正看到任何可以提供基于事件循环的良好示例的东西(不是很复杂,例如 lighttp 和 nginx)。
有吗?如果没有,我应该阅读/查看什么来帮助我学习如何制作这种服务器?(这包括 C 中的异步 IO 等)
我已经了解了基于事件循环的编程如何工作的基础知识,尤其是在 Python 等高级语言中,但我需要能够用 C 来实现。
javascript - javascript事件循环问题
我想知道事件循环在 javascript 中是如何工作的,我使用的是 node.js,但我想同样的问题也适用于浏览器。
我有一些异步调用(比如说setTimeout
or $.ajax
or fs.readFile
),过了一会儿,事件循环执行callback
现在当callback
被执行时,幕后会发生什么?它是否恢复了它在调用异步内容时使用的堆栈?
在实践中,回调所处的上下文/this 是什么?它是如何工作的?
编辑:谢谢,我明白了.. 还有一个问题,事件循环如何“记住”回调的范围?
events - 一个有效的事件循环实现?
可能重复:
你将如何实现一个基本的事件循环?
不是一个特定于语言的问题。什么是事件循环的有效实现?到目前为止,我只遇到过这样的事情:
我认为这不是最好的方法——如果睡眠时间太短,它会消耗大量的 CPU,如果太长,应用程序将非常无响应。
那么,有没有更好的方法呢?
谢谢
event-handling - Python 3 的事件循环实现?
有谁知道可用于 Python 3 的事件循环库(或绑定)?如果它只适用于 UNIX 系统也没关系,尽管我更喜欢适用于 Windows 的系统。
ETA:我意识到编写一个事件循环系统并不难。但是,我不想重新发明轮子(这些天我们仍然鼓励不要这样做,对吧?;-))
这是为服务器应用程序计划的,所以显然我想要一些不依赖于 GUI 小部件工具包或其他东西的东西。
如果答案是“不,没有”(可能;我肯定找不到),那么我很可能会为 Python 3 为 libev 创建一个绑定。
javascript - Why does this javascript block in Node.js?
I have the following simple http server using Node.js:
When I curl into my local host on port 8000, I do get the expected result of:
But when I try to curl in from another terminal while the first process is running, I see the console hang and wait for the first process to finish entirely before it starts receiving the same output.
My understanding was that since this is async code using callbacks that node could handle multiple requests in sync by processing them on the next tick of the event loop. And in fact I even watched a video of Ryan Dahl doing something similar with a hello world example. What's in my code that's making the server block?
php - php - 任何方式来做“真正的” fascgi?
我一直在 fcgi 设置中使用 perl 和 ruby,并计划将大型 php 代码库从 mod_php 迁移到 fcgi,我查看了 php 站点,发现他们支持 fcgi 并且 5.3 具有 fpm 以提高 fcgi 的易用性但我无法在 php 中找到事件循环的任何示例 - 我想我稍后会寻找......好吧,现在是稍后了,我吓坏了,因为我认为 fcgi 是 fcgi 然后我读了这个:
http: //blog.milkfarmsoft.com/2006/06/fastcgi-in-php-the-way-it-could-be/
“PHP 的 fastcgi SAPI 没有将 runloop 暴露给 PHP 应用程序,而是在自身内部实现它。因此,我们仍然有“一切都在退出时清理”模式,这使我们无法预先初始化任何东西。”
天啊 :(
该网站每天获得数百万页浏览量,对 fcgi 的重写本应节省数百万 php 和 mysql opens/lib 设置和 memcache 打开等。
有没有办法用 php 做“真正的”fcgi?提前感谢您的任何想法。
winapi - 显示窗口后执行代码
我正在开发一个 Windows 应用程序,我自己正在实现整个事件循环和类似的一切(这是有原因的)。在一个地方,我需要在显示一个窗口后执行一些代码。通常,当创建窗口时,我会在收到 WM_CREATE 消息时进行一些初始化。WM_SHOWWINDOW 在窗口显示之前发送。但是,我需要在第一次显示窗口后立即执行一些代码。在显示窗口后,我似乎找不到发送的通知消息。难道没有一个吗?
当然,我可以保留一个布尔值 - FirstRun - 表示我是否已经执行了我的逻辑,然后在收到 WM_ACTIVATE 时执行代码,前提是布尔值为 TRUE,然后将 FirstRun 设置为 FALSE,这样代码就不会执行下次我收到 WM_ACTIVATE,但这对我来说似乎有些不自然。
自从我在这个级别上进行 win32 编程以来已经有很多年了,所以我记不太清了。这里最好的方法是什么?
c++ - 当在错误槽中启动事件循环时发生 ContentNotFoundError 时,QNetworkReply 发出两次错误信号
我正在使用 QtSDK 4.7.3
我在 (void test()) 中这样做:
当然,插槽 onError 被称为:
如果我在 onError 插槽中没有消息框/事件循环,则不会发生崩溃并且一切正常。但是当它在那里时,当调用 m.exec() 时会再次调用 onError 插槽。当两个消息框都关闭并且我离开函数 onError 时,应用程序崩溃。发生这种情况时,应用程序会尝试删除/释放内存。错误“访问冲突读取位置”无济于事,并且调用堆栈深入 Qt dll。
我检查了什么:
信号没有连接两次。
尝试在 QApplication 调用它的 exec 函数之前和之后调用 test() 。(不要紧)。
另一个像 HostNotFound 这样的错误不会调用 onError 槽两次。
我所有的代码都在主线程中执行。
尝试断开 onError 插槽,因此它只被调用一次,但它仍然崩溃。
尝试在 onError() 中对请求调用中止。
在 Qt 论坛(帖子)上发布了相同的问题。
谁能帮我弄清楚这里发生了什么?
这是我用于测试的代码:main.cpp
contentnotfound.h
c - Ruby C 扩展:同时运行一个事件循环
我正在实现一个简单的窗口库作为 Ruby C 扩展。Windows 有一种handle_events!
方法可以进入其本机事件循环。
问题是我想要每个窗口和方法块有一个事件循环。我希望该方法立即返回并让循环在单独的线程中运行。实现这一目标的最佳方法是什么?
我尝试使用rb_thread_call_without_gvl
来调用事件循环函数,然后使用rb_thread_call_with_gvl
来调用窗口的回调,即Proc
s. 完整的源代码可以在这里找到。
它仍然有效,但不是我想要的:该方法仍然阻塞。Ruby 的线程模型甚至可以做到这一点吗?
javascript - 在javascript中编写非阻塞for循环的最干净的方法是什么?
所以,我一直在考虑一个脑筋急转弯——如果我有一个大对象我出于某种原因不得不在节点 js 中迭代,并且不想在我这样做的时候阻塞事件循环怎么办?
这是一个令人难以置信的例子,我相信它可以更干净:
虽然我确信还有其他原因导致它变得混乱,但这将比常规的 for 循环执行得慢,因为 setInterval 0 实际上并不是每 0 毫秒执行一次,但我不确定如何使用 much更快的 process.nextTick。
在我的测试中,我发现这个示例需要 7 毫秒才能运行,而本机 for 循环(使用 hasOwnProperty() 检查,记录相同的信息)需要 4 毫秒。
那么,使用 node.js 编写相同代码的最简洁/最快的方法是什么?