想象一下,我在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
}
因此,我有2个addon的同步调用,但是在此addon中使用了两个线程。一个函数将启动线程,而另一个函数将其加入。问题是:
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
是短暂的。