4

我正在用 C++ 编写一个本地节点模块,它将成为 C 库的绑定。

此库中的某些对象只能由单个线程使用。这意味着如果我使用uv_queue_work我不能确保它们只被同一个线程使用,因为 -据我所知- libuv 使用一个线程池,我无法找出如何告诉它哪个线程用于此类工作。

以下是针对这种情况的一些想法,但我不确定哪种方法是正确的。

  • 只需使所有方法同步 - 不幸的是,这会超出节点的目的和概念,所以我不想这样做
  • 创建一个自定义线程并在其上执行我的代码 - 这会破坏 libuv 线程池的目的并需要更多工作
  • 以某种方式告诉 libuv 在其线程池中的同一线程上执行同一对象的操作 - 我在文档中没有找到执行此操作的方法

这种 Node.js 模块的推荐行动方案是什么?

4

1 回答 1

2

虽然我首先会说架构不支持通用回调模型很不幸,但我会接受这是一种无法避免的特殊情况。

您仍然可以完全访问本机模块中的 libuv API,因此完全可以创建自己的线程,使用该单个线程来安排所有适用的异步工作。如需快速入门,请查看http://nikhilm.github.io/uvbook/threads.html

操作完成后,您可以将所需的 js 回调传递给MakeCallback. 这应该允许任何 js API 交互看起来正常。

于 2013-07-01T06:48:53.033 回答