我写了一个实现和一个自动代码生成器,允许不同的进程使用Message队列进行进程间通信。
我的实现与原始数据类型一起工作正常,但是当用户想要传递非POD [普通旧数据类型]类型时失败。
关于人们的建议here on SO我读到了有关Boost序列化及其如何允许序列化非POD的信息。
问题:
Q1。序列化/反序列化本身是否被视为IPC机制,还是与其他实现一起使用? [换句话说,我应该使用序列化来增强我的消息队列实现,还是应该继续作为IPC机制本身进行序列化? ]
如果是,它会不会很慢,因为它涉及将数据写入硬盘并从那里读取它?
或者只是我的误解,所有像d-bus这样的IPC实际上可能会将数据保存到磁盘上,只是将文件标识符传递给另一个进程来读取?
答案 0 :(得分:2)
序列化/反序列化本身并不是IPC机制 - 您需要使用类似管道的东西来在不同进程之间进行通信。话虽如此,您绝对可以将数据串行/去除这些管道的数据。
使用这样的策略可能很慢,但如果是这样,任何缓慢都会来自序列化和缓冲。如果你正在使用管道,你只是将序列化的字节传递给内存,而不是写入磁盘然后从磁盘读取。
我在C#编写了一个这样的模式的实现,不久之前,如果你对一些实现思路感兴趣的话,就会有一篇博客文章here。