簡體   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