繁体   English   中英

使用C ++共享Julia对象的最有效方法是什么?

[英]What is the most efficient way of sharing a Julia object with C++?

我有一个用C ++编写的存储管理器,我想将一些对象从Julia传递给C ++程序。 对于我来说,接收内容作为一个字节数组就足够了,以后可以将其传递回Julia并轻松解码。

什么是最小化复制数据的最佳方法(并且还避免写入/读取磁盘)?

可以从C ++程序中分配所需的内存并与Julia共享以序列化对象,或者从Julia获取指向已分配内存的指针到C ++程序中。 在后一种情况下,我不确定如何防止Julia方面的垃圾收集。 另外,我不知道哪种序列化/反序列化方法更适合这种用例。

你能指导我找到Julia和C ++之间这种轻量级序列化/反序列化的最佳方法吗?

编辑:如果答案是依赖于操作系统的,请给出Linux或macOS的答案。

不幸的是,我无法为您提供任何源代码,因为我没有使用下面提到的C ++中的任何框架,也根本不了解Julia。

我在过去的项目中一直遵循的方法不像共享指向已经由C ++分配的内存的指针一样轻量级。 但是,既然还没有答案,我只想补充一下我如何在编程语言之间交换对象(在我的例子中是Java和C#)。

我没有读取和写入光盘,而是使用了消息队列来使两个子系统相互交换对象。

序列化

序列化,特别是涉及更复杂的对象时,可能非常耗费资源。 但是,我开始喜欢使用协议缓冲区,因为它们将预定义的对象序列化为字节流。

可以在Google Protobuffers中找到协议缓冲区的C ++库示例。 Julia的协议缓冲区分别可以在ProtoBuf.jl中找到

使用协议缓冲区的缺点是您需要有一个已定义的消息格式,这意味着您需要事先知道要交换的对象是什么样的。

交换数据

可以使用消息传递队列来完成数据交换,该消息传递队列不是共享指针或者使用本地机器的网络接口写入盘。 我一直在使用的消息队列已经是ZeroMQ,因为它非常轻巧且易于使用。 但是,任何其他消息队列也应该用于此目的。

ZeroMQ的Julia接口分别是C ++的ZMQ.jlcppzmq ZeroMQ完整指南对于帮助您入门非常有帮助,但您不需要为您的目的提供整个文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM