4

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 つありますが、このアドオンでは 2 つのスレッドが使用されます。1 つの関数がスレッドを開始し、もう 1 つの関数がそれらに参加します。質問は次のとおりです。並行して実行されますかrandom_void_function? とは同期しているrandom_void_function_2ので、とはイベント ループをブロックしますか? 私が見たところ、彼らはブロックしません。my_functionfinal_functionrandom_void_functionrandom_void_function_2

4

1 に答える 1

1

質問は次のとおりです: random_void_function と random_void_function_2 は並行して実行されますか?

はい、彼らが十分に長生きするのであれば。それらが短命である場合、同様にもっともらしい結果は、最初の開始と終了が 2 番目の開始と終了の前に行われることです (またはその逆)。

my_function と final_function は同期しているため、random_void_function と random_void_function_2 はイベント ループをブロックしますか? 私が見たところ、彼らはブロックしません。

いいえ、多分。 イベントループをブロックし addon.my_functionません。addon.final_results(これは の代わりに上記で呼び出すつもりだったと思います) は、 s が存続しているaddon.final_function場合にのみブロックされます。random_void_function存続期間が短く、すでに終了している場合は、addon.final_resultsすぐに終了します。

ブロッキングが見られないので、random_void_functions は短命だと思います。

于 2016-01-07T20:51:12.693 に答える