gpt4 book ai didi

node.js - 观察nodejs阻塞调用

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:51 25 4
gpt4 key购买 nike

我正在尝试连接到第三方库,该库具有可以阻止的功能。我想使用它,但不阻塞。是否可以包装一个我无法控制的阻塞调用,使其异步?

// calling this function will block the nodejs thread
blockingCall();

我想要的是这样的。

// wrapper for the blocking call
var wrapper = wrapBlockingCall(blockingCall);
wrapper.on('complete', function() {});

这可能吗?这有道理吗?

最佳答案

没有办法让 Node.js 中的阻塞 JavaScript 代码成为非阻塞 - Node 用于其非阻塞行为的机制是在 C/C++ 层中实现的,而该层仅在执行 I 时使用/O 操作(从磁盘读取、网络等)。

实际上,你的程序使用的每一行 JavaScript 都会被逐一执行,因为无论你做什么,它总是在同一个线程上执行。

我看到的唯一选择是使用内置的 Child Process 在单独的 Node 进程中执行有问题的代码。模块。但是,这会对性能产生显着的影响,如果需要频繁执行代码,影响甚至更大。

注意:

阅读您问题下的评论后,您似乎实际上是阻塞函数的作者,该函数又调用了执行阻塞 I/O 的 C API。有多种方法可以调用通常会阻塞的 C 函数,但不会阻塞上层 JavaScript 层。

虽然我不是 C 专家,但我认为这是使用 Node 中包含的 libuv 库完成的 - 看看 addons文档以获取更多信息。

关于node.js - 观察nodejs阻塞调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33069925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com