libUV を使用して C node.js アドオンを作成し、アドオンを非同期にしました。
このためにいくつかのキューを作成しました。
コードは次のようにloopArray
なり、これらのキューを格納するために使用されます。
//... variables declarations
void AsyncWork(uv_work_t* req) {
// ...
}
void AsyncAfter(uv_work_t* req) {
// ...
}
Handle<Value> RunCallback(const Arguments& args) {
// ... some preparation work
int loopNumber = (rand() % 10);
int status = uv_queue_work(loopArray[loopNumber], &baton->request, AsyncWork, AsyncAfter);
uv_run(loopArray[loopNumber]);
return Undefined();
}
extern "C" {
static void Init(Handle<Object> target) {
int i = 0;
for (i = 0; i< 10; i++){
loopArray[i] = uv_loop_new();
}
target->Set(String::NewSymbol("callback"), FunctionTemplate::New(RunCallback)->GetFunction());
}
}
NODE_MODULE(addon, Init)
問題は、CPU を大量に消費するタスク用に 10 個のキューを作成したとしてもです。node.js は、キューの 1 つを処理している間、タスクを切り替えません。node.js のシングルスレッドの性質によるものですか?
そうですか、uv_thread_create は状況に役立ちますか?
このためのコード サンプルが見つからないため、使用方法がわかりません。
ありがとう!