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

想象一下,我使用一个同步函数,从我的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 } 

所以我有两个同步调用的插件,但在这个插件使用两个线程。 一个函数将启动线程,另一个将join它们。 问题是: 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是短暂的。