linux进程间通信的方式有哪些

发布时间 - 2020-06-29 00:00:00    点击率:
linux进程间通信的方式有:1、管道(包括匿名管道和命名管道);2、信号;3、消息队列;4、共享内存;5、信号量;6、套接字。管道的实质是一个内核缓冲区,进程利用管道传递信息。

linux进程间通信的方式:

(推荐学习:linux教程)

Linux进程间基本的通信方式主要有:管道(pipe)(包括匿名管道和命名管道)、信号(signal)、消息队列(queue)、共享内存、信号量和套接字。

下面分别介绍一下这几种方式:

1、管道

管道的实质是一个内核缓冲区,管道的作用正如其名,需要通信的两个进程在管道的两端,进程利用管道传递信息。管道对于管道两端的进程而言,就是一个文件,但是这个文件比较特殊,它不属于文件系统并且只存在于内存中。

2、信号

信号是软件层次上对中断机制的一种模拟,是一种异步通信方式,进程不必通过任何操作来等待信号的到达。信号可以在用户空间进程和内核之间直接交互,内核可以利用信号来通知用户空间的进程发生了哪些系统事件。

3、消息队列

消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识,并且允许一个或多个进程向它写入与读取消息

4、共享内存

使得多个进程可以可以直接读写同一块内存空间,是针对其他通信机制运行效率较低而设计的。

为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。

注意:共享内存并未提供同步机制,在一个进程结束对共享内存的写操作之前,并无自动机制可以阻止另二个进程开始对它进行读取。所以,我们通常需要用其他的机制来同步对共享内存的访问。

5、信号量

信号量实质上就是一个标识可用资源数量的计数器,它的值总是非负整数。而只有0和1两种取值的信号量叫做二进制信号量(或二值信号量),可用用来标识某个资源是否可用。

6、套接字

套接字是更为基础的进程间通信机制,与其他方式不同的是,套接字可用于不同机器之间的进程间通信。

有两种类型的套接字:基于文件的和面向网络的。

(1)Unix套接字是基于文件的,并且拥有一个“家族名字”--AF_UNIX,它代表地址家族(address family):UNIX。

(2)第二类型的套接字是基于网络的,它也有自己的家族名字--AF_INET,代表地址家族(address family):INTERNET

不管采用哪种地址家族,都有两种不同的套接字连接:面向连接的和无连接的。

(1)面向连接的套接字(SOCK_STREAM)

进行通信前必须建立一个连接,面向连接的通信提供序列化的、可靠地和不重复的数据交付,而没有记录边界。

这意味着每条信息可以被拆分成多个片段,并且每个片段都能确保到达目的地,然后在目的地将信息拼接起来。

实现这种连接类型的主要协议是传输控制协议(TCP)。

(2)无连接的套接字(SOCK_DGRAM)

在通信开始之前并不需要建立连接,在数据传输过程中并无法保证它的顺序性、可靠性或重复性。

然而,数据报确实保存了记录边界,这就意味着消息是以整体发送的,而并非首先分成多个片段。

由于面向连接的套接字所提供的保证,因此它们的设置以及对虚拟电路连接的维护需要大量的开销。然而,数据报不需要这些开销,即它的成本更加“低廉”。

实现这种连接类型的主要协议是用户数据报协议(UDP)。


# linux  # 信号量  # 多个  # 自己的  # 是一个  # 两种  # 的是  # 这一  # 都有  # 也有  # 是一种 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  详解Android中Activity的四大启动模式实验简述  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何破解联通资金短缺导致的基站建设难题?  如何在阿里云服务器自主搭建网站?  Laravel如何实现API资源集合?(Resource Collection教程)  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  详解MySQL数据库的安装与密码配置  如何获取免费开源的自助建站系统源码?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel如何生成URL和重定向?(路由助手函数)  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  jQuery中的100个技巧汇总  如何构建满足综合性能需求的优质建站方案?  Swift中循环语句中的转移语句 break 和 continue  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Windows Hello人脸识别突然无法使用  如何在IIS中配置站点IP、端口及主机头?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  英语简历制作免费网站推荐,如何将简历翻译成英文?  EditPlus中的正则表达式 实战(4)  如何在阿里云完成域名注册与建站?  简历没回改:利用AI润色让你的文字更专业  如何在建站主机中优化服务器配置?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Android滚轮选择时间控件使用详解  重庆市网站制作公司,重庆招聘网站哪个好?  如何用腾讯建站主机快速创建免费网站?