在应用程序之间共享数据 - 共享内存 vs D-Bus vs 文件操作

Posted

技术标签:

【中文标题】在应用程序之间共享数据 - 共享内存 vs D-Bus vs 文件操作【英文标题】:Sharing data between applications - share memory vs D-Bus vs File operation 【发布时间】:2012-01-26 00:32:08 【问题描述】:

考虑一个场景,其中两个应用程序必须在它们之间共享数据。我能想到三种方法-

    共享内存(我可以使用 Boost) D-Bus(允许 glib / Qt 实现) 两个应用程序之间对公共文件的文件操作。

第一季度。考虑到要共享的数据将非常大(例如大约 10K 歌曲名称),这应该是我的方法。

第二季度。做文件操作会不会影响速度,和其他的相比,因为会涉及到硬盘?

第三季度。还有其他更快的方法吗?

实现语言 - C++

【问题讨论】:

【参考方案1】:

您可能需要考虑使用 QtSql 模块来使用数据库,特别是 SQLite。

SQLite 数据库是一个跨平台的进程内数据库引擎。这使您可以轻松地存储结构化数据并在进程之间安全地同时访问它,这些进程甚至可以用不同的语言编写。

SQLite 可以很好地处理数百万条记录,非常快速且可靠。 主要问题是两个进程都在写入,因为它使用数据库级锁定,因此在写入操作期间没有其他进程可以读取或写入数据库。

使用 QtSql 的另一个好处是,将来您可以使用 PostgreSQL 或 mysql 等数据库服务器轻松地使程序在网络上运行。

【讨论】:

感谢您的回复。但由于一些项目限制,我将无法使用 SQLite。如果有人可以从上面给出的选项中选择最佳方法?

以上是关于在应用程序之间共享数据 - 共享内存 vs D-Bus vs 文件操作的主要内容,如果未能解决你的问题,请参考以下文章

在两个应用程序之间共享内存

Excel 加载项在类库之间共享内存

是否可以在 docker 容器之间共享内存?

在 Dalvik 中的两个进程之间共享内存

如何在c中制作共享内存?

如何使用 mmap 在用户空间和内核之间共享内存并且数据没有文件支持