加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

套接字 – 哪个IPC在这里效率更高?

发布时间:2020-12-15 21:56:37 所属栏目:安全 来源:网络整理
导读:我有一个系统应用程序,它作为unix上12个进程的集合运行.有一个监视进程,它与其他11个进程交换数据. IPC的要求是使这11个过程与监控过程进行通信,并以最有效的方式设计.你们可以权衡以下两个选项,或建议一个更好的选项. 1)具有UDP套接字通信,其中这11个进程将
我有一个系统应用程序,它作为unix上12个进程的集合运行.有一个监视进程,它与其他11个进程交换数据.

IPC的要求是使这11个过程与监控过程进行通信,并以最有效的方式设计.你们可以权衡以下两个选项,或建议一个更好的选项.

1)具有UDP套接字通信,其中这11个进程将定期将数据推送到监视器进程.监控过程只是监听和捕获足够好的信息.

要么

2)具有共享内存实现.所以有11个共享内存段,每个段在2个进程(进程ith和监视进程)之间共享.

对于共享内存,它似乎更快但需要锁定/同步,其中在udp中,内核将数据从一个进程的内存空间复制到另一个进程.

任何人都可以提供更多输入来帮助更好地评估这两种方法. ?谢谢.

解决方法

协调共享内存非常棘手.父必须知道何时读取11个共享内存段中的每一个的哪一部分,并让孩子知道何时读取数据以便可以重用共享内存的一部分等.因此,尽管复制可能是更快,其余的协调(可能使用信号量集 – 可能有22个信号量,一个用于11个通信信道的每个方向)意味着你几乎肯定会找到一个基于文件描述符的机制更容易编码. select()或poll()或variant系统调用可用于告诉您何时有要读取的主数据.内核处理调度和流量控制等所有令人讨厌的问题.

因此,除非您能够真正证明您将从共享内存版本中获得性能优势,否则请使用Unix域套接字.但是期望丢失一些头发(以及一些数据)以使共享内存实现正确. (您可以证明使用共享内存与原始的,不正确的同步系统是否有性能优势;您可能不会使用粗略的不正确同步系统进行生产.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读