Linux 如何在两个流程之间建立通信?
我有以下情况:Linux 如何在两个流程之间建立通信?,linux,sockets,Linux,Sockets,我有以下情况: 对保存在内存中的数据执行特权操作的守护程序 一个多线程服务器,目前运行在大约30个内核上,处理用户请求 服务器(1)将接收来自(2)的查询,逐个处理,然后返回答案。对(1)的每个查询都不会被阻塞,并且只需要(1)上的几分之一微秒的处理时间,因此我们可以保证快速返回响应,除非(1)因负载过多而超限 从本质上讲,我想设置一个场景,其中(1)侦听UNIX域套接字,(2)写入请求并读取响应。但是,我希望(2)的每个线程都能够同时读写。我的想法是每个线程有一个UNIX套接字,用于(1)和(
有人有更好的想法吗?我建议一种可行的方法是按照您自己的建议,让每个线程创建自己的套接字,以便与守护进程通信。您可以使用流(tcp)套接字,它可以轻松解决动态添加更多线程的问题:
socket()
、bind()
和listen()
侦听特定端口。正在侦听的套接字最初是其epoll\u wait
集合中的唯一内容connect()
accept()
)传入连接以创建新套接字,该套接字将添加到其epoll\u wait
设置中,并使用epoll\u ctl()
上述过程可用于根据需要任意添加多个套接字,所有这些都在守护进程端使用一个
epoll\u wait
循环。我建议一种可行的可能性是按照您自己的建议,让每个线程创建自己的套接字,以便与守护进程通信。您可以使用流(tcp)套接字,它可以轻松解决动态添加更多线程的问题:
socket()
、bind()
和listen()
侦听特定端口。正在侦听的套接字最初是其epoll\u wait
集合中的唯一内容connect()
accept()
)传入连接以创建新套接字,该套接字将添加到其epoll\u wait
设置中,并使用epoll\u ctl()
上述过程可用于任意添加所需数量的套接字,所有这些都在守护进程端使用一个
epoll\u wait
循环。对不起,您能否更详细地解释一下您提出的解决方案的问题是什么?让(2)的每个线程按照您的建议写入自己的套接字,以及(1)epoll_wait
ing在所有线程上,如果您正在谈论数据报(看起来是!),那么让多个线程在同一个套接字上侦听(和写入),这似乎是完全合理的解决方案。此方案不需要任何外部同步(就其本身而言。当然,您可能需要同步外部数据)。@SergeyA:我猜同一套接字的问题在于读取响应时,试图找出响应属于哪个线程?@Smeeheey:如果套接字和线程之间有1对1的映射,然后,在增加服务器上的线程数量时,我必须以某种方式将此信息传递给进程(1),以便它开始侦听该套接字。对不起,您能否更详细地解释一下您提出的解决方案的问题是什么?让(2)的每个线程按照您的建议写入自己的套接字,以及(1)epoll_wait
ing在所有线程上,如果您正在谈论数据报(看起来是!),那么让多个线程在同一个套接字上侦听(和写入),这似乎是完全合理的解决方案。此方案不需要任何外部同步(就其本身而言。当然,您可能需要同步外部数据)。@SergeyA:我猜同一套接字的问题在于读取响应时,试图找出响应属于哪个线程?@Smeeheey:如果套接字和线程之间有1对1的映射,然后,在增加服务器上的线程数量时,我必须以某种方式将此信息传递给进程(1),以便它开始侦听该套接字。