在本地节点模块中,如何确保asynchronous代码始终在同一线程上运行?

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

该库中的一些对象只能由单个线程使用 。 这意味着,如果我使用uv_queue_work我不能确保它们只被同一个线程使用,因为 – 据我所知 – libuv使用线程池,我还没有能够找出如何告诉它什么线程用于这种工作。

这里有一些关于情况的想法,但是我不确定哪个是正确的方法。

  • 简单地使所有的方法同步 – 这将不幸击败节点的目的和概念,所以我不想
  • 创build一个自定义的线程,并执行我的代码 – 这将打败libuv的线程池的目的,并需要更多的工作
  • 告诉libuv以某种方式执行相同的对象在其线程池中相同的线程的操作 – 我还没有find一种方法在文档中做这个

这种Node.js模块的推荐scheme是什么?

虽然我会开始说不幸的是,架构不支持通用callback模型,我会接受这是一个无法避免的特殊情况。

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

操作完成后,您可以将所需的jscallback传递给MakeCallback 。 这应该允许任何js API交互显示正常。