for*_*est 4 c++ multithreading node.js libuv node.js-addon
我有一个 C++ 库,客户端应用程序使用这个库从服务器查询数据。这个库创建了一个单独的线程与服务器通信,查询结果将作为回调函数中的参数传递。
现在我想将这个 c++ lib 包装到 nodejs 原生模块,因为回调函数是在这个 lib 自己的线程中调用的,为了将查询结果传递给 js 环境,我相信我必须使用 libuv 的 uv_async_send(uv_async_t* async) 方法来传递两个线程之间的数据。(如果我错了,请纠正我)
根据libuv 的文档:
警告:libuv 将合并对 uv_async_send() 的调用,也就是说,并非每次调用都会产生回调的执行。例如:如果在调用回调之前连续调用 uv_async_send() 5 次,则回调只会被调用一次。如果在调用回调后再次调用 uv_async_send() ,则会再次调用。
这个警告是否意味着 uv_async_send 可能导致数据丢失?我想知道 libuv 是否为这个问题提供了更好的解决方案,或者我应该使用其他一些 thead 库。
你是对的 -uv_async_send是唤醒主线程的正确方法。我建议每次调用时uv_async_send,都将回调的相关数据累积在队列或向量或其他容器中。正如文档中提到的, uv_async_send() 调用将被合并,并且回调事件将至少唤醒主线程一次。为了确保传递所有回调数据,您需要将其存储在队列或向量中的某个位置,以便您的 C++ 回调代码可以传递所有这些数据。
| 归档时间: |
|
| 查看次数: |
2049 次 |
| 最近记录: |