我没有看到的是一个坚实的定义什么确切的“蜱”是。基于各种文章(such as this one),我已经能够把一个概念一起在我的头,但我不知道它是多么准确。
我可以得到一个node.js事件循环tick的精确和详细的描述吗?
解决方法
因此,当套接字上有可用的数据或本地API函数返回时,我们需要一个同步方法来调用对刚刚发生的特定事件感兴趣的JavaScript函数。
从本地事件发生的线程调用JS函数是不安全的,因为在常规多线程应用程序中遇到的相同原因 – 竞态条件,非原子内存访问等等。
所以我们做的是以线程安全的方式将事件放在队列中。在过度简化的伪码中,类似:
lock (queue) { queue.push(event); }
然后,回到主JavaScript线程(但在事物的C侧),我们做类似:
while (true) { // this is the beginning of a tick lock (queue) { var tickEvents = copy(queue); // copy the current queue items into thread-local memory queue.empty(); // ..and empty out the shared queue } for (var i = 0; i < tickEvents.length; i++) { InvokeJSFunction(tickEvents[i]); } // this the end of the tick }
while(true)(实际上不存在于节点的源代码中;这只是说明性的)表示事件循环。 inner用于为队列中的每个事件调用JS函数。
这是一个tick:同步调用与任何外部事件相关联的零个或多个回调函数。一旦队列被清空并且最后一个函数返回,则记号结束。我们回到开始(下一个勾),并检查在我们的JavaScript运行时从其他线程添加到队列的事件。
什么可以添加到队列中的东西?
> process.nextTick
> setTimeout / setInterval
> I / O(来自fs,net等的东西)
> crypto的处理器密集型功能,如加密流,pbkdf2和PRNG(实际上是…的示例)
>使用libuv work queue使任何同步C/C++库调用看起来异步的任何本机模块
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。