我在 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 在处理其中一个队列时不会在任务之间切换。是不是因为 node.js 的单线程特性?
是这样, uv_thread_create 是否有助于这种情况?
我找不到任何代码示例,所以我不知道如何使用它。
谢谢!