监视阻止调用nodejs

我试图连接到第三方库,它有一个function,可以阻止。 我想用它,但没有阻塞。 是否有可能包装一个我没有控制的阻塞调用,使其asynchronous?

// 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 ++层中实现的,而C / C ++层仅在进行I / O操作时使用(从磁盘读取,networking等)。

实际上,程序使用的每一行JavaScript都将一一执行,因为它总是在同一个线程上执行,不pipe你做什么。

我看到的唯一select是使用内置的subprocess模块在单独的节点进程中执行有问题的代码。 但是,如果代码需要频繁执行,这将会对性能产生重大影响,甚至更大。

注意:

在阅读你的问题之后,看起来你实际上是阻塞函数的作者,而后者又调用一个执行阻塞I / O的C API。 有一些调用C函数的方法,这些方法通常会以不阻塞上层JavaScript层的方式进行阻塞。

虽然我不是C专家,但我认为这是通过使用Node中包含的libuv库来实现的 – 查看附加文档以获取更多信息。