gpt4 book ai didi

c++ - Node 原生插件 : Convert string argument to UTF-8 in worker thread

转载 作者:行者123 更新时间:2023-12-02 10:29:56 26 4
gpt4 key购买 nike

我有一个高性能 Node 应用程序,主线程中不必要地阻塞的每一毫秒都是有害的。大多数繁重的处理都是在 C++ native Node 插件中完成的。效果很好。
有时,Javascript 代码需要将很长的字符串传递给插件 C++ 代码。困扰我的(通过分析验证)是当(复制&)将(非常长的)字符串转换为 UTF-8 时,主线程中有一个重要的 block ,然后拷贝最终被卸载到工作线程。
是否可以将复制和转换卸载到工作线程?
我知道通常一个人可能不会从一个单独的线程访问 Javascript 对象,但这不是一个硬性规则(正如一些人所建议的那样)。例如,可以(并且很常见)采用 Persistent引用 Buffer对象并在单独的线程中直接访问数据(无拷贝)。理想的解决方案是对字符串数据执行相同的操作,从而避免在主线程中复制任何字符串。

最佳答案

的使用ArrayBuffer 或 TypedArray 可能通过避免内存复制来最小化内容的重复,这里有一个例子。
https://github.com/msatyan/MyNodeC/blob/master/src/mync1/ArrayBuff.cpp
https://github.com/msatyan/MyNodeC/blob/master/test/TestArrayBuff.js
为了避免阻塞 node.js 主线程,您可以通过将繁重的任务委托(delegate)给线程来引入异步操作。下面的 StackOverflow 帖子通过使用 Promise 提供了此类场景的示例。
How to create async function using NAPI that return Promises

关于c++ - Node 原生插件 : Convert string argument to UTF-8 in worker thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62638786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com