序列化作为 IPC 机制?
Posted
技术标签:
【中文标题】序列化作为 IPC 机制?【英文标题】:Serialization as an IPC mechanism? 【发布时间】:2013-02-26 07:22:56 【问题描述】:我编写了一个实现和一个自动代码生成器,允许不同的进程使用消息队列进行进程间通信。
我的实现适用于原始数据类型,但当用户想要传递非 POD [Plain Old Datatypes] 类型时失败。
根据人们的建议 here on SO 我阅读了有关 Boost 序列化以及它如何允许序列化甚至非 POD 的信息。
问题:
第一季度。序列化/反序列化本身是否被视为 IPC 机制,还是与其他实现一起使用? [换句话说,我应该使用序列化来增强我的消息队列实现,还是应该继续将序列化作为 IPC 机制本身? ]
如果是,会不会很慢,因为它涉及将数据写入硬盘并从那里读取?
或者这只是我的误解,所有像 d-bus 这样的 IPC 实际上可能会将数据保存到磁盘上,然后将文件标识符传递给其他进程进行读取?
【问题讨论】:
【参考方案1】:序列化/反序列化本身并不是 IPC 机制 - 您需要使用管道之类的东西在不同进程之间进行通信。话虽如此,您绝对可以在这些管道中序列化/反序列化数据。
使用这样的策略可能会很慢,但如果是这样,任何缓慢都会来自序列化和缓冲。如果您使用管道,您只是通过内存传递序列化字节,而不是通过写入磁盘然后从磁盘读取。
我前段时间在 C# 中写了一个类似这样的模式的实现,如果你对一些实现想法感兴趣,有一篇关于它的博客文章 here。
【讨论】:
If you're using pipes, you're just passing the serialised bytes through memory, not by writing to the disk and then reading from the disk.
从我在 Boost 代码中看到的内容来看,序列化过程本身涉及打开文件并将数据写入其中,然后在另一端读取和反序列化。知道我如何仅在 RAM 中序列化数据并将其作为 IPC 机制的输入[可能是管道] 进行传输吗?
@AmitTomar:序列化只是将数据编码成字节数组的一种方式(以及解码它的反序列化);您如何处理这些数据取决于您:写入文件以确保安全,通过网络发送给远方的同伴,为您的孩子刻骨铭心......这取决于您。
这个想法是将流打开到管道中,这样,只使用内存,不使用磁盘 I/O。以上是关于序列化作为 IPC 机制?的主要内容,如果未能解决你的问题,请参考以下文章