将jscallback函数传递给另一个线程调用的ffi函数是否安全?

说我有一个C函数,它需要一个callback,并在另一个线程上调用它:

void call_in_new_thread(void (*callback)()) { // spawn a new thread and call `callback` in it ... } 

现在我想通过Node-FFI从javascript调用这个函数,并传递一个javascript函数:

 var callbackType = 'pointer' var lib = ffi.Library('mylib', { 'call_in_new_thread': [ 'void', [ callbackType ] ], }) var callback = ffi.Callback('void', [ 'void' ], function() { // which thread I'm in now? console.log("hello!") }) lib.call_in_new_thread(callback) 

我的问题:有效吗? 线程安全吗? javascriptcallback实际执行哪个线程? 在node.js主线程中,还是在由ffi库创build的线程中? Node-FFI是否以某种方式同步通话?

一起快速演示来testing一下: https : //github.com/madadam/rust_ffi_async_demo 。 (使用铁锈,而不是本地部分的C,但这应该等同于铁锈可以build立到正常的共享库)。

所以,在运行演示之后,我会回答自己的问题:

  • 是的,这似乎是有效和安全的
  • jscallback在主线程中执行
  • Node-FFI似乎通过将jscallback推送到在主线程上popup的队列来处理同步。