在操作系统还没有虚拟内存空间的年代,每个进程都是访问物理内存,进程间通信最为简单,约定好内存地址就行了,比如说进程A,从0x23开始,连续放100个字节的数据,进程B从物理内存中将这份数据拷贝走即可。
不过这种操作系统现在我们用不着了,现在每个进程的内存空间都是虚拟的,互不相干的。接下来最好理解的就是通过硬盘文件来进行通信。进程A在C盘根目录产生一个a.txt文件,进程B将文件打开,将内容读取出来即可。
其实,也不是非要一个硬盘中文件,也可以是一个操作系统的文件句柄,传递的内容不必真的放在硬盘中,比如说windows的内存共享机制,unix的通道机制,不过这些机制现在的普通码农可能早就不关心了。
采用文件来传递信息,在很多严肃的系统间,还是唯一能被双方接收的方案。A公司和B公司合作,A公司为B公司提供重要数据。最靠谱的做法就是A公司启用一个FTP服务器,将数据生成文件,将FTP访问权限开发给B公司。B公司定时将文件取走。别看这样老土,但是仔细想想,这是最容易责任倒查的方式,某种程度上,白纸黑字无可抵赖,谁对谁错一目了然。
接下来要讲的就是通过TCP来跨进程通信,不管什么高大上的Web Service,本质上就是通过TCP来通信。两个进程间建立网络连接就可以互相发信息,至于信息格式,如何解析如何组包,这都是细节层面的东西,本文不想去细说。
到了现在,各种成熟的跨进程通信的方案,基本上都是走网络连接了。各种方案基本功能都没有问题,难就难在一些高级特性能否支持,比如说能不能将通信内容持久化(保留一段时间,方便定位故障和责任倒查),对通信内容进行可以方便的查询和过滤,通信的双方支持透明的集群和冗余等等。