javascript – 在Node.js Addon中使用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
}

所以我有2个同步调用addon,但在这个插件中使用了两个线程.一个函数将启动线程,另一个函数将加入它们.问题是:random_void_function和random_void_function_2将并行运行?由于my_function和final_function是同步的,因此random_void_function和random_void_function_2会阻止事件循环?从我看来,他们不会阻止.

最佳答案

The questions are: random_void_function and random_void_function_2 will run in parallel?

是的,只要他们活得足够长.如果它们是短暂的,那么同样合理的结果是第一次开始和退出在第二次开始和退出之前(反之亦然).

Since my_function and final_function are synchronous, the random_void_function and random_void_function_2 will block the event loop? From what I see, they not block.

不,也许. addon.my_function不会阻止事件循环. addon.final_results(我假设你打算调用上面而不是addon.final_function)只会阻塞random_void_functions是否存在.如果它们是短暂的并且已经退出,则addon.final_results将立即退出.

由于你没有看到任何阻塞,我怀疑random_void_functions是短暂的.

点赞