一些编程和API设计上的形式美:
(48 封私信 / 70 条消息) RPC是什么,看完你就知道了 - 知乎
RMI远程调用 - Java教程 - 廖雪峰的官方网站
RPC协议的主要目的是做到不同服务间调用方法像同一服务间调用本地方法一样。
RMI远程调用是指,一个JVM中的代码可以通过网络实现远程调用另一个JVM的某个方法。
本质上是代码写得好不好,抽象层和兼容性是否亲和。
传递介质:
长命:寄存器、内存、文件系统、数据库、网络
短命:导线、无线电
【linux学习指南】 进程间通信&&匿名管道&&理解管道的本质-腾讯云开发者社区-腾讯云
(48 封私信 / 66 条消息) 一文搞懂六大进程通信机制原理(全网最详细) - 知乎
分布式架构通信方式 - 卑以自牧lq - 博客园
分布式通信的几种基本方式RPC、RMI、JMS、EJB、WebService-腾讯云开发者社区-腾讯云
blog-data/其他/面试题/Linux/进程间通信.md at master · xujiyou/blog-data
总结了一下,分为四个象限,和介质什么的都没关系。
同时/异时
为什么不用“同步/异步”字眼,因为无论同时/异时,只要加入时钟信号触发等表示时间的量都可以实现精准的同步。只是“同时”由于两端连通,不存在“已读不回”,延迟没那么离谱罢了。
“必须两端同时连接”还是“任意一端即可连接”
管道和套接字
管道(进程间通信) - Win32 apps | Microsoft Learn
WIndows进程通信(IPC)之管道通信 - 卖雨伞的小男孩 - 博客园
一文让你明白,什么是管道(pipe)?进程之间利用管道进行通信的具体流程?以及C++简单利用管道API函数的使用案例。c++ pipe-CSDN博客
(48 封私信 / 68 条消息) 深入解析Linux进程通信:管道、信号与IPC机制全攻略 - 知乎
管道与共享内存 区分 - zeroPatrick - 博客园
Linux学习(五)——数据流和管道_重定向用改变数据流的-CSDN博客
[Linux] 流 ( Stream )、管道 ( Pipeline ) 、Filter - 笔记 - TonyYPZhang - 博客园
(48 封私信 / 68 条消息) 一文搞懂Linux内核管道和套接字 - 知乎
pipe管道和socket套接字的一些区别_socket pipe-CSDN博客
Unix 域套接字与命名管道:异同全面解析,帮你选对通信机制! - ByteZoneX社区
c++ - 管道和套接字有什么区别? - SegmentFault 思否
在Linux内核中,FIFO、管道和Unix域套接字是同一回事吗? pipe linux-kernel socket ipc - Dev59
之前socket编程也体验过,这就像打电话一样,需要两边都s.connect()什么的来建立连接。正是这种“双方连通”的特性,C语言使用管道基本都是父子进程通信用。
管道(Pipe)在C语言中的应用|极客教程
即使对于命名管道,也是类似文件的打开关闭机制
Linux进程间通信(四):命名管道 mkfifo()、open()、read()、close() - 52php - 博客园
我认为对于导线线缆,两端都连通才可通信,就算是管道吧(单端连通,又没有寄存器,数据发出去就丢了,没有意义)。
为了确认连接不断线,一般会有心跳包机制,请求——响应(TCP先握手,UDP直接发,ROS服务)
消息数据结构(消息队列、消息堆栈……)
写入遵从数据结构规范(队列先进先出,堆栈后进先出……)
但是读取时可以实现消息的随机查询,不仅仅读最后一个了;
多个进程都可访问,无需接收方监听等待即可直接写入消息;
最基本的,对单个变量的写入,就可以视为这种类型。
我认为对于寄存器,单端连通即可读写,就算是消息吧(移位寄存器,或许可以抽象为消息队列……)。
同时(强行介入):信号
此时发送端和接收端的权力并不对等,发送端发送信号是为了紧急控制接收端,接收端要立即做出响应。
想到父进程操控子进程的情况,父进程对子进程的支配的管道,何尝不是一种持久的信号呢……(拨号握手这种不算,这种没连上就丢了)
信号是进程通信机制中唯一的异步通信机制,它可以在任何时候发送信号给某个进程。通过发送指定信号来通知进程某个异步事件的发送,以迫使进程执行信号处理程序。信号处理完毕后,被中断进程将恢复执行。
有点抢断的机制,类似硬件的中断。
可以认为每个进程在诞生时候就被操作系统装了一个后门用来插入一套消息接收代码用来处理紧急消息,就像每个集成电路芯片都会装上Reset引脚一样。
同地/异地
消息在进程之间的转移,是否经过物理上的转移。
数据拷贝
名字我自己取的,一般不共享资源的都是这种吧。其中DMA可以提高拷贝效率。
共享内存
不是说物理上的内存共享(所有的基于内存的通信都可以说内存有共享),而是对同一块内存有着相等同的完全开发权。
多个进程都可访问,而且视为自己的一部分,这减少了数据拷贝操作。
(我认为即使是管道也可以是共享内存的形式,只要把我方发送变量内存地址映射到对方接收变量内存地址就好了)