导读:
微服务架构下,依赖dubbo的rpc框架就能实现进程间通信。其实还有更快的进程间通信方式-共享内存,这值得我们去学习和借鉴思维模式。
前言:
本文讨论说明的操作系统为linux操作系统。“一切皆文件”的设计理念下的操作系统内的多进程通信,自然地会想到采用获取fd句柄的方式来实现。接下来先了解共享内存的原理,并分享一个采用共享内存通信的应用案例。
原理:
- 多进程通过共享内存通信
- 这是一个典型的采用共享内存方式实现进程间数据通信的过程:进程B将输入文件读入到共享内存区中,采用信号量通知进程A。进程A从共享内存区中读取数据写到输出文件中。这带来一个优势:用户态到内核态的数据拷贝,只发生了两次。
- 那怎么实现的呢?以posix共享内存举例来看
- 比把大象放冰箱少一步,共两步。第一步:先创建或者打开内存映射文件/共享内存区对象。第二步:调用mmap实现共享内存区映射到进程的地址空间。接下来就可以像访问内存一样,访问共享内存了。只是这块内存属于多进程共享。
- 为了实现共享内存访问安全和有效性,我们需要用到锁或者信号量来协助。资源只能在同一时间被一个进程读、写。