gpt4 book ai didi

linux - 如何建立两个进程之间的通信?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:18 24 4
gpt4 key购买 nike

我有以下情况:

  1. 对保存在内存中的数据执行特权操作的守护进程。

  2. 目前在大约 30 个内核上运行的多线程服务器处理用户请求。

服务器 (1) 将接收来自 (2) 的查询,一个一个地处理它们,然后返回一个答案。对 (1) 的每个查询都不会阻塞,并且在 (1) 上只需要几分之一微秒的时间来处理,因此我们保证可以快速返回响应,除非 (1) 因负载过多而超限。

基本上,我想设置一种情况,其中 (1) 监听 UNIX 域套接字,(2) 写入请求并读取响应。但是,我希望 (2) 的每个线程都能够并发读取和写入。我的想法是让每个线程有一个 UNIX 套接字用于 (1) 和 (2) 之间的通信,在这些套接字上的 epoll_wait 上有 (1) block 一个接一个地处理请求。 (2) 上的每个线程然后将独立地读取和写入其套接字。

我发现这种方法的问题是我无法轻松地动态增加 (2) 上的线程数。有没有一种方法可以在运行时配置方面灵活地实现这一点?我想一种方法是拥有大量的套接字,并且 (2) 上的线程会随机选择一个套接字,在其上获取互斥量,编写查询并阻止等待响应,然后在获得互斥量后释放互斥量来自 (1) 的响应。

有人有更好的想法吗?

最佳答案

我建议一个可行的可能性是按照你自己的建议,让每个线程创建自己的套接字来与守护进程通信。您可以使用流式 (tcp) 套接字,它可以轻松解决动态添加更多线程的问题:

  1. 守护进程使用 socket()bind()listen() 监听特定端口。正在监听的套接字最初是其 epoll_wait 集中唯一的东西。
  2. 客户端线程使用connect()连接到这个端口
  3. 守护进程服务器接受(使用accept())传入的连接以创建一个新的套接字,该套接字被添加到其使用epoll_ctl() 设置的epoll_wait

上述过程可用于根据需要任意添加任意数量的套接字,所有这些都在守护进程端使用单个 epoll_wait 循环。

关于linux - 如何建立两个进程之间的通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37882168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com