gpt4 book ai didi

c++ - 如何在 native Node 模块中维护零拷贝?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:35 26 4
gpt4 key购买 nike

我正在为具有零拷贝数据查找功能的进程内数据库编写 native Node 模块。我希望我的模块也有这种能力。换句话说,当我从数据库中获取数据时,我想将数据传递给 V8,而不需要复制内存或解析某些东西。

我该怎么做?

到目前为止,我所看到的所有方法都涉及在 JSON 之间来回解析(在这种情况下非常浪费资源)或实例化 V8 数据结构并将数据复制到其中。

注意:如果您想知道,零复制数据查找意味着(简而言之)数据库引擎在检索数据时不需要复制内存。

最佳答案

我想我找到了解决方案,尽管它相当有限。

可以在此处找到有趣的文档:https://developers.google.com/v8/ (概述)和 http://izs.me/v8-docs/main.html (API 文档)

似乎 V8 有一个可以用于此目的的 ExternalStringResource 类:
http://izs.me/v8-docs/classv8_1_1String_1_1ExternalStringResource.html

Node 本身也有一个 Buffer 类,它也可以用于类似的目的:
http://nodejs.org/api/buffer.html

通过使用上述两个类,可以在原生 Node 模块中实现字符串和字节数组的零拷贝。不幸的是,似乎(在我写这篇文章的时候)对象是不可能的。

编辑

如果您对对象的 stringBuffer 属性(但不是整个对象本身)具有零复制能力没问题,它可以使用 V8 API 中的拦截器或访问器轻松实现。

关于c++ - 如何在 native Node 模块中维护零拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16477385/

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