在Node.js插件中使用std::thread

Using std::thread in Node.js Addon

本文关键字:std thread Node js 插件      更新时间:2023-10-16

想象一下,我使用Node.js插件中的同步函数:

var check_ok = addon.my_function(parameters);
var final_results = addon.final_function(parameters);

但在方法代码中我有:

std::thread t[10]; //Global
//...
void my_function(const FunctionCallbackInfo<v8::Value>& args) {
//....
t[0] = thread(random_void_function, [parameters])
t[1] = thread(random_void_function_2, [parameters])
//...
}
//...
void final_results(const FunctionCallbackInfo<v8::Value>& args) {
//...
t[0].join();
t[1].join();
//...Give results.. etc
}

所以我有两个插件的同步调用,但在这个插件中使用了两个线程。一个函数将启动线程,另一个将连接线程。问题是:random_void_functionrandom_void_function_2将并行运行?由于my_functionfinal_function是同步的,那么random_void_functionrandom_void_function_2会阻塞事件循环吗?据我所见,他们没有阻拦。

问题是:random_void_function和random_void_function_2将并行运行?

是的,只要他们活得够久。如果它们是短暂的,那么一个同样合理的结果是,第一次出发和离开先于第二次出发和退出(反之亦然)。

由于my_function和final_function是同步的,那么random_void_function和random_void_function_2会阻塞事件循环吗?据我所见,他们没有阻拦。

不,也许吧。addon.my_function而不是阻止事件循环。addon.final_results(我想您想在上面调用它而不是addon.final_function)只会在random_void_function是长寿命的情况下阻塞。如果它们的寿命很短并且已经退出,addon.final_results将立即退出。

由于您没有看到任何阻塞,我怀疑random_void_function是短暂的。