1

我编写了一个 Nodejs C++ 模块,它利用 NANAsyncWorker来公开异步模块功能。效果很好。但是,我知道这AsyncWorker利用了 libuv 的线程池,默认只有 4 个线程。

虽然这(或基于 #-of-cores 的限制)可能对 CPU 密集型功能有意义,但我公开的一些功能可能会运行相对较长的时间,即使它们不使用 CPU(网络活动等)。因此,即使没有进行计算密集型工作,线程池也可能全部用完。

简单的解决方案是增加线程池大小 ( UV_THREADPOOL_SIZE)。但是,我担心这个线程池也用于其他事情,这可能会由于过多的并行化而受到性能影响(libuv 文档指出,“线程池是全局的,并且在所有事件循环中共享......” )。

我的担忧有效吗?有没有办法只为某些AsyncWorker长时间运行但不是 CPU 密集型的线程池使用单独的、更大的线程池,同时保持公共线程池不变?

4

0 回答 0