我在一段时间内为 nodejs 开发了本机模块,有些情况对我来说不是很清楚。不幸的是,v8 文档不是很好。
所以对我来说有一个有趣的领域。首先可以std::thread
在主本地模块线程中使用吗?文档说我可以使用 libuv 函数并运行异步操作,但是在这个库中我们无法访问 v8 对象。但是,如果我想在主线程中同步我的计算,例如,在另一个线程中修改一些 JS 对象属性,结果会怎样?
我尝试了以下代码:
double result;
void myFunction(Local<Value> a, Local<Value> b)
{
std::cout << "from thread " << std::this_thread::get_id() << " " << std::endl;
result = a->NumberValue() + b->NumberValue();
}
void add(const FunctionCallbackInfo<Value>& args)
{
Isolate* isolate = args.GetIsolate();
std::cout << "main "<< std::this_thread::get_id() << std::endl;
thread thread(myFunction, args[0], args[1]);
thread.join();
args.GetReturnValue().Set(Number::New(isolate, result));
}
它可以按我的预期工作,但是如果我们无法访问另一个线程中的 v8 对象,为什么?
我还尝试将结果更改为 v8::Number 类型并通过当前隔离和新隔离在 myFunction 中创建它,但出现段错误。