共享内存、消息队列与管道应如何选择并保证通信正确性
简答题中等558 次浏览
参考答案与解析
# 核心结论
三种通信方式应根据数据规模、消息边界、通信拓扑、背压需求和容错成本选择。管道适合本机、顺序、流式的生产者—消费者通信;消息队列适合传递离散消息,需要保留消息边界、类型或优先级的场景;共享内存适合同一主机上的大块数据或高频通信,能够减少复制,但同步协议和故障恢复最复杂。通信正确性不能只看“数据是否传过去”,还要定义并发访问、消息完整性、容量耗尽、进程退出、重复处理和异常恢复的语义。
# 底层机制
匿名管道通常由父进程创建,并通过派生关系传递读写端;命名管道则通过文件系统名称让无亲缘关系的进程会合。两者通常表现为有界字节流,不自动保存业务记录边界。若多个写者同时写入,只有不超过系统原子写入上限的单次写入才可能
