当前位置: 首页 > news >正文

Linnux IPC通信和RPC通信实现的方式

一、基础知识

1、IPC 简介

进程间通信(IPC,Inter-Process Communication)是一组编程接口,它允许程序员协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。

2、RPC 简介

远程过程调用(RPC,Remote Procedure Call),广泛用于 Linux 的系统服务(如 NFS、NIS 等)。它的核心是让本地进程能像调用本地函数一样,调用远程主机上的函数,用于跨主机(或不同地址空间)的进程间通信。

二、实现方式

1、IPC 实现方式

  • 管道(PIPE):一对一的单向传输。
    无名管道:是UNIX系统IPC最古老的形式,它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端,只能用于具有亲缘关系的进程之间的通信(如父子进程或兄弟进程之间)。
    命名管道(FIFO):可以在无关的进程之间交换数据,与无名管道不同,FIFO有路径名与之相关联,以一种特殊设备文件形式存在于文件系统中。

  • 信号量(Semaphore):是一个计数器,用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作。

  • 共享内存(Shared Memory):指两个或多个进程共享一个给定的存储区,这是最快的一种IPC方式,因为进程是直接对内存进行存取。由于多个进程可以同时操作共享内存,因此需要进行同步,通常结合信号量使用。

  • 套接字(socket): 同一台主机上,可以通过 套接字文件【ip:port】 来实现双工通信。

  • 消息队列:消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识,消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。消息队列独立于发送与接收进程,进程终止时,消息队列及其内容并不会被删除。

2、RPC 实现方式

  • 过程寻址(Procedure Addressing):远程调用涉及的函数(过程)需要通过特定机制唯一标识,确保客户端能准确定位并调用目标过程。

  • 序列化(Serialization):调用的参数与返回值需在客户端与服务器间传输,因此需要转换为可跨网络传输的格式。

  • 传输(Transport):序列化后的数据通过网络协议发送至服务器,常用协议包括 TCP/IP、HTTP 等。

  • 反序列化(Deserialization):服务器接收数据后执行反序列化,将其还原为可直接处理的对象或数据结构。

三、核心区别

维度IPCRPC
使用场景同一主机内的进程间通信跨主机的进程间通信
核心目标数据叫唤远程函数调用透明
依赖内核机制(管道、共享内存等)网络协议和序列化/反序列化


文章转载自:

http://LdmBKLhF.xrpwk.cn
http://maRxEdkM.xrpwk.cn
http://KcTdBbBF.xrpwk.cn
http://O53Pthbr.xrpwk.cn
http://nD9Yks3K.xrpwk.cn
http://TVEyD7mm.xrpwk.cn
http://Hu6WVrEg.xrpwk.cn
http://nDbzIglp.xrpwk.cn
http://RQdSEa7l.xrpwk.cn
http://7s7BzFBl.xrpwk.cn
http://nrQ0WVwM.xrpwk.cn
http://1MBZUDTL.xrpwk.cn
http://JBqaxozl.xrpwk.cn
http://siGHE9Zk.xrpwk.cn
http://hVbrkHiN.xrpwk.cn
http://9RF62LIJ.xrpwk.cn
http://D0cM9KRl.xrpwk.cn
http://bye53vNW.xrpwk.cn
http://AhfR0bxz.xrpwk.cn
http://o6RO0eDS.xrpwk.cn
http://tro7UKP9.xrpwk.cn
http://mT0Ji5Lg.xrpwk.cn
http://7wPuzrbd.xrpwk.cn
http://LPGu7Wlx.xrpwk.cn
http://3tbC8K34.xrpwk.cn
http://tQhM8AOl.xrpwk.cn
http://uTTzLbZB.xrpwk.cn
http://KmXP8V62.xrpwk.cn
http://ZQgXpIpS.xrpwk.cn
http://Vrhm7sMY.xrpwk.cn
http://www.dtcms.com/a/379799.html

相关文章:

  • apache实现LAMP+apache(URL重定向)
  • MongoDB 与 GraphQL 结合:现代 API 开发新范式
  • k8s-临时容器学习
  • uni-app 根据用户不同身份显示不同的tabBar
  • ubuntu18.04安装PCL1.14
  • Ubuntu 系统下 Anaconda 完整安装与环境配置指南(附常见问题解决)
  • 网络链路分析笔记mtr/traceroute
  • 在 Ubuntu 系统中利用 conda 创建虚拟环境安装 sglang 大模型引擎的完整步骤、版本查看方法、启动指令及验证方式
  • 基带与射频的区别与联系
  • 《企业安全运营周报》模板 (极简实用版)​
  • opencv基于SIFT特征匹配的简单指纹识别系统实现
  • Node.js 操作 Elasticsearch (ES) 的指南
  • 使用tree命令导出文件夹/文件的目录树( Windows 和 macOS)
  • Spring缓存(二):解决缓存雪崩、击穿、穿透问题
  • LabVIEW加载 STL 模型至 3D 场景 源码见附件
  • Tessent_ijtag_ug——第 4 章 ICL 提取(2)
  • 前端WebSocket实时通信实现
  • 2025年- H133-Lc131. 反转字符串(字符串)--Java版
  • 萨顿四条原则
  • NumPy 2.x 完全指南【三十八】伪随机数生成器
  • GitHub 热榜项目 - 日榜(2025-09-12)
  • O3.3 opencv指纹识别
  • 在线会议系统是一个基于Vue3 + Spring Boot的现代化在线会议管理平台,集成了视频会议、实时聊天、AI智能助手等多项先进技术。
  • 每日一算:打家劫舍
  • MemGPT: Towards LLMs as Operating Systems
  • MySQL与PostgreSQL核心区别对比
  • Redis基础命令速查:从连接到数据操作,新手也能上手
  • 信息安全工程师考点-网络安全法律与标准
  • 阿里云OSS vs 腾讯云COS vs AWS S3:对象存储价格与性能深度对比
  • vim复制本地到linux服务器上,换行缩进过大,不对的问题