2016-08-16 32 views
7

说我有一个C函数,它接受一个回调,并调用它在另一个线程:将js回调传递给一个在另一个线程中调用它的ffi函数是否安全?

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

现在我想打电话给通过节点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) 

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

回答

4

一起快速演示来测试一下:https://github.com/madadam/rust_ffi_async_demo。 (使用防锈,而不是C为本地部分,但这应该等同于生锈可以建立到普通共享库)。

因此,运行演示后,我会回答我的问题是这样的:

  • 是的,这似乎是有效和安全的
  • JS的回调被主线程中执行
  • Node-FFI似乎通过将js回调推送到在主线程上弹出的队列来处理同步。
相关问题