在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_function
和random_void_function_2
将并行运行? 由于my_function
和final_function
是同步的,因此random_void_function
和random_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
是短暂的。