游戏天空论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 28|回复: 0

进程间的通信方式

[复制链接]

2428

主题

2428

帖子

7668

积分

论坛元老

Rank: 8Rank: 8

积分
7668
发表于 2023-10-4 11:47:05 | 显示全部楼层 |阅读模式
同一台计算机的通信称为IPC,不同计算机的通信被称为RPC,需要通过网络并遵守共同的协议。进程与进程之间的通信,主要有几下几种方式:管道、信号、消息队列、共享内存、信号量、套接字
1,管道
管道又分为匿名管道和命名管道。匿名管道主要是用于父子进程之间的通信,如一个线程fork一个独立的子线程,那么这个线程和这个子线程就可以通过匿名管道的方式进行通信。命名管管道就是在匿名的管道的基础上,允许无亲缘关系的进程之间的通信。
2,信号
如上面的main主线程中,可以发现执行完会有一个 Signal Dispatcher 信号分发的线程,主要用于发送信号和接收信号,类似于一种软件层面的中断,与处理器的中断效果一致,可以通知另外一个进程即将有某个事件要发生
3,消息队列
这个消息队列和rabbitMq一样,就是在内存中的一个链表。通过这种方式克服了前面两种通信方式种信号量有限的缺点。就是一边负责将这个信号放到消息队列中,一边负责去接收这个信号量
4,共享内存(重点)
共享内存这种方式可以说是最有用的进程间的通信方式,就是开辟一个共享空间,每个进程都可以访问和修改这块内存空间,不同的进程可以及时的看到对方进程中对共享数据的更新。这种方式需要依赖互斥锁或者信号量的操作,从而解决可能出现的并发问题。
如下有着三个进程abc,都可以同时的操作上面公共的物理内存空间,从而实现共享内存的方式
5,信号量
主要是通过这个clh同步等待队列实现,主要是作为进程之间以及同一个进程不同线程之间的同步和互斥手段
6,套接字
就是一个socket的套接字,一般用于网络中不同机器之间的进程间的通信,其应用相对广泛。并且在同一台机器中,可以使用 Unix domain socket ,这种方式不需要经过网络协议栈,不需要打包拆包,计算检验和,维护序号和应答等,比纯粹基于网络间的进程通信效率更高。如典型的mysql,不管是从控制台还是从其他机器连接,由于其内部使用的是套接字的连接方式,其实现方面和这个网络的实现方式是一样的,因此其内部和本机可以共用一套代码。套接字的类型主要分有:流套接字、数据报套接字、原始套接字 。
TG:@cdncloudlisiwen
QQ:2832254781

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|游戏天空论坛 ( 陕ICP备13009885号 )

GMT+8, 2024-4-29 01:57 , Processed in 0.140625 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表