javascript - 如何检查函数是否在 Node 的工作线程中运行?

标签 javascript node.js

我尝试在 Node 中使用worker_threads来运行一些昂贵的计算而不阻塞主线程。

是否可以检查该函数是否确实在工作线程中运行,就像使用浏览器开发工具中的性能选项卡一样?

最佳答案

如果工作线程正在运行阻塞代码,这可能就是您首先将其推送到工作线程的原因,那么它会被阻塞并且无法直接与您通信,因为它必须从您接收消息并发送一个响应供您与其通信,但如果它被阻止执行其他操作,则它不会处理消息,因此在完成之前您无法与其通信。

你可以做的事情:

让工作线程告诉您它何时开始以及何时完成

当函数开始运行时,它会向主线程发送一条消息。主线程获取该消息并存储该状态。当函数完成时,它会向主线程发送一条已完成的消息。主线程将接收该消息并可以更新状态。

因此,只要工作线程可靠地遵循该逻辑,那么在任何时候,主线程都可以查阅它必须知道工作线程最后告诉它是正在运行还是已完成的状态。

测试工作线程的消息处理响应能力

另一种选择是向工作线程发送一条消息,其中包含某种 uniqueID,并记下发送消息的时间。然后,工作线程(当它可以自由处理该消息时)将对其做出响应并返回相同的 uniqueID。从主线程中,您可以假设,如果您发送给工作线程的消息没有得到快速响应,那么它一定很忙。您必须使用 uniqueID,因为响应会在将来某个时候返回,并且您必须知道哪些响应需要注意以及哪些可能是旧的。这基本上只是一个测试,看看工作线程是否快速响应消息 - 从而表明它没有被当前正在运行的某些阻塞操作阻塞。

关于javascript - 如何检查函数是否在 Node 的工作线程中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65878073/

相关文章:

javascript - 将 Algolia Instantsearch.js 与 Autocomplete.js 同步

javascript - Sencha touch 2 ajax 回调函数作用域

javascript - 使用 Twisted 和 Node 理解事件循环

node.js - 如何防止经验丰富的攻击者知道您的应用程序是由生产中的 Express.js 提供支持的?

javascript - 在 async.waterfall 方法中构建 mongoose 回调。

javascript - 检索帖子参数

javascript - 如何转义冒号(:) in XML for XML Reader in extjs 4

javascript - 在包含(文字连接)中使用文字与 Sequelize

node.js - fluent-ffmpeg display_aspect_ratio 没有改变

javascript - 如何访问 onreadystatechange 之外的数组(范围问题)