是否可以在固定时间内将一条消息发送到多个接收套接字?

问题描述 投票:-2回答:1

这在一般方面更多,但我最近需要通过python中的UNIX域套接字将通过WebSocket API接收的大量消息发送到多个子进程。纯线程是不可替代的,因为我需要真正的并发性(希望我不会将它与并行性混淆),因此只剩下进程。在主进程和子进程之间共享内存比使所有进程只在自己的套接字上监听会带来更大的开销。

程序如下:

  1. 主进程中的线程侦听传入的WebSocket消息并将它们放入队列中
  2. 主进程忙 - 旋转并检查队列中的新消息(如果有),它将其发送到多个(可能大约3-4个)子进程。

在对上述脚本进行概要分析后,我发现每个子进程大约需要3毫秒才能发送消息。考虑到需要高吞吐量,在3个子进程的情况下,我宁愿每个消息等待3毫秒而不是9毫秒。是否有可能将这个时间从O(n)减少到O(1)?

到目前为止,只有异步已经浮现在脑海中,但我想尽可能不使用它。

python python-multithreading python-asyncio
1个回答
1
投票

如果你可以创建一组固定的子进程,即一个集有3 / n个进程,你选择一个集并转发到所有进程,那么,你可以考虑为每个子进程集使用一个多播IP /套接字。

或者,如果子进程开销不是很重要,您可以让所有子进程侦听同一个多播组,这意味着所有子进程都会从主进程获取所有消息并检查消息参数以确定该消息是否适用于该进程。

多播IP执行第2层广播,因此数据包仅在线路上发送一次,并且多播组中的所有套接字同时读取相同的消息。

© www.soinside.com 2019 - 2024. All rights reserved.