- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图理解什么是 JavaScript 中的事件循环。发现了 Mozilla 开发者网络关于事件循环的链接。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/EventLoop
里面提到了
Queue
A JavaScript runtime contains a message queue, which is a list ofmessages to be processed. To each message is associated a function.When the stack is empty, a message is taken out of the queue andprocessed. The processing consists of calling the associated function(and thus creating an initial stack frame). The message processingends when the stack becomes empty again.
在此上下文中消息队列是什么意思?它是指我们在浏览器中执行的每次点击或键盘事件吗?每个事件都是一条消息并添加到队列中?
请澄清。
最佳答案
术语“消息队列”的含义与听起来差不多。它是一个要处理的队列(读取:要执行的事件回调),一次一个并按顺序处理。
这个“消息队列”不是 ECMAScript 的一部分,而是用于描述在单线程执行模型中处理异步事件的行为 - 每个浏览器事件(点击、计时器、AJAX 等)都被添加到队列中并以相同的方式进行处理。同样,node.js 使用事件进行异步 I/O 操作。
每当给定的全局上下文(即窗口或进程)没有 JavaScript 执行时,“消息队列”就会被处理,直到为空(通过“事件循环”)。这就是为什么阻塞 JavaScript 是不好的 - 它会阻止队列被处理(这会阻止执行事件回调),直到阻塞代码停止执行。
event queue / event loop in node.js与浏览器的工作方式相同,只是事件不同。这就是 Node.js 在不暴露多个线程和相关复杂性的情况下支持并发的方式。
<小时/>将消息添加到此“消息队列”的代码最常见的方法之一是使用setTimeout
- 当超时到期时将回调添加到队列中。假设有一点善意的谎言(因为回调仅在事件实际发生时才添加到队列中),请考虑
setTimeout(f, 0)
setTimeout(g, 0)
将以序列 f, g
while
setTimeout(f, 20) // MUST exceed time to g event firing
setTimeout(g, 0)
会将回调序列“排队”g, f
。这些顺序保证是可以依赖的,因为(由于 setTimeout 保证)添加到队列中的消息/事件是按顺序处理的。
由于上面的代码正在运行(例如正在执行 JavaScript),因此还可以保证在给定的 JavaScript 停止执行并且可以处理“消息队列”之前,f
和 g
回调都不会被调用。但是,不能普遍保证(在任何一种情况下)f
和 g
之间不会处理额外的事件/回调。
关于javascript - 此链接中的 "message queue"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22827311/
我试图弄清楚以下模块正在做什么。 import Queue import multiprocessing import threading class BufferedReadQueue(Queue.
如果我使用 Queue.Queue,那么我的 read() 函数不起作用,为什么?但是,如果我使用 multiprocessing.Queue,它运行良好: from multiprocessing
我正在寻找比我在文档中找到的更多关于 Python 队列实现的见解。 根据我的理解,如果我在这方面有误,请原谅我的无知: queue.Queue():通过内存中的基本数组实现,因此不能在多个进程之间共
当我使用多处理模块(Windows 上的 Python 2.7)中的队列代替 Queue.Queue 时,我的程序没有完全关闭。 最终,我想使用 multiprocessing.Process 处理
阅读了大量的 JavaScript 事件循环教程,我看到了不同的术语来标识队列存储消息,当调用堆栈为空时,事件循环准备好获取消息: 队列 消息队列 事件队列 我找不到规范的术语来识别它。 甚至 MDN
我收到错误消息“类型队列不接受参数”。当我将更改队列行替换为 PriorityQueue 时,此错误消失并且编译正常。有什么区别以及如何将其更改为编译队列和常规队列? import java.util
如何将项目返回到 queue.Queue?如果任务失败,这在线程或多处理中很有用,这样任务就不会丢失。 docs for queue.Queue.get()说函数可以“从队列中删除并返回一个项目”,但
如何在多个 queue.Queue 上进行“选择”同时? Golang 有 desired feature及其 channel : select { case i1 = 声明。 线程:queue 模
http://docs.python.org/2/library/queue.html#Queue.Queue.put 这似乎是一个幼稚的问题,但我在文档和谷歌搜索中都没有找到答案,那么这些方法是线程
这可能是个愚蠢的问题,但我对与 .dequeue() 和 $.queue() 一起使用的 .queue() 感到困惑> 或 jquery.queue()。 它们是否相同,如果是,为什么 jquery
我正在尝试创建一个线程化的 tcp 流处理程序类线程和主线程对话,但是 Queue.Queue 也没有做我需要的,服务器从另一个程序接收数据,我只想传递它进入主线程进行处理这里是我到目前为止的代码:
The principal challenge of multi-threaded applications is coordinating threads that share data or ot
在Queue模块的queue类中,有几个方法,分别是qsize、empty 和 full,其文档声称它们“不可靠”。 他们到底有什么不可靠的地方? 我确实注意到 on the Python docs网
我需要一个队列,多个线程可以将内容放入其中,并且多个线程可以从中读取。 Python 至少有两个队列类,Queue.Queue 和 collections.deque,前者似乎在内部使用后者。两者都在
明天我将介绍我选择进程内消息队列实现的基本原理,但我无法阐明我的推理。我的合作设计者提议我们实现一个简单的异步队列,只使用基本的作业列表和互斥锁来控制访问,我建议在嵌入式模式下使用 ActiveMQ。
在 scala 中定义了一个特征: trait Queue[T] Queue 是一种类型吗?或其他东西,例如类型构造函数? 来自 http://artima.com/pins1ed/type-para
我看到 SML/NJ 包含一个队列结构。我不知道如何使用它。如何使用 SML/NJ 提供的附加库? 最佳答案 Queue structure SML '97 未指定,但它存在于 SML/NJ 的顶级环
我是 D3 和 JavaScript 的新手。 我试图理解其中的 queue.js。 我已经完成了 this关联。但是仍然无法清楚地了解 queue.await() 和 queue.awaitAll(
所以我试图在我的 main.cpp 文件中调用一个函数,但我得到“错误:没有匹配函数来调用‘Queue::Queue()。” 队列.h #ifndef QUEUE_H #define QUEUE_H
假设我有一个 10 行的二维 numpy 数组 例如 array([[ 23425. , 521331.40625], [ 23465. , 521246.03125],
我是一名优秀的程序员,十分优秀!