C++跨平台:进程间通讯(IPC)的技术选型
Posted CodeBowl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++跨平台:进程间通讯(IPC)的技术选型相关的知识,希望对你有一定的参考价值。
本系列继续记录,作为一个新人小白,在第一次接触C++跨平台(win、linux、mac)开发的经验和踩坑。
前言
在四个月前,我还是一名学生,开发一个功能,我的需求就是能跑就行,最多加一个没有bug。
而现在,在一次次的开会中,我成为了憔悴的社会打工人,也明白了在代码开发前,更重要的是设计和架构,确定好大方向,后面的事情才能走在正确的道路上。
开发一个功能,没有bug的运行自然是最低要求,但是往往在开发前,需要经过技术选型,选择一个最适合的方案,这几天有一个跨进程通信的需求,我们就使用什么方案也经过讨论,下面我把我的心得记录如下。
进程间通信
进程间通信是什么?
进程之间要保证相对独立,一个进程不能随便访问另一个进程的地址空间,这是系统安全性的保证和需要。但实际上进程之间确实也要协作在一起去完成一项大的任务,这时就需要进程之间有一定的通知和数据传递。在保证进程之间相对独立的同时,也要保证进程之间合理有效的通信。
简述一下需求
本机几个进程通信需求,用来传输数据,不需要跨机器。
跨平台需求。
进程间通信有哪些方式
在百度搜索常见的进程间通讯,你会得到以下答案:
- 匿名管道通信 匿名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。
- 高级管道通信
- 有名管道通信
- 消息队列通信
- 信号量通信
- 共享内存等
- socket
但是在实际的开发中,我们更像使用的是成熟的方案,比如封装好的第三方库,这样极大减少开发成本,并且经过使用验证的第三方库,也可以保底不会出现大问题。
借鉴经验
借鉴已有的经验,通常公司开发,会使用三种方式:
- socket,使用socket封装一套通讯库,性能好
- rpc:现在比较新的方式
- ipc第三方库
不知道从哪里寻找经验的,建议直接github:
需要考虑的地方
经过以上的步骤,我们现在至少能找到一个能用,并且不要大量人力开发的ipc方案了。
但是,除此之外,我们还要考虑安全性、性能、复杂度等问题。
例如安全性问题,rpc方案,也就是远程过程调用,它实际上是为网络通讯设计的,所以他是借助http协议进行传输的,需要考虑从端口被恶意占用等问题,并且作为一个进程间通信的需求,rpc确实复杂度稍高。
同时性能也是考虑的重点,如果有高并发的情况,则更需要考虑。
ipc方案推荐
最后,推荐一下,也算做个总结,思路就是我上面写的,我从github上选取了一个跨平台实现的ipc方案,具体我还没有测试过,但是搜过性能压测什么,都是没什么问题的,大家可以做参考!
- grpc:google的方案,大公司保障:https://github.com/grpc/grpc
- RaftLib C++库,通过C++iostream类运算符进行流/数据流并发:https://github.com/RaftLib/RaftLib
参考资料
以上是关于C++跨平台:进程间通讯(IPC)的技术选型的主要内容,如果未能解决你的问题,请参考以下文章