这在一般方面来说更多,但是最近我需要通过python中的UNIX域套接字将通过WebSocket API接收到的许多消息发送到多个子进程。纯线程是不可替代的选择,因为我需要真正的并发(希望我不会将其与并行性混淆),因此仅保留进程。与让所有进程仅在自己的套接字上进行侦听相比,在主进程和子进程之间共享内存会带来更大的开销。
该过程如下:
分析完上面的脚本后,我发现每个子进程发送消息大约需要3毫秒。考虑到需要高吞吐量,我宁愿每个消息等待3毫秒,而不是3个子进程的9毫秒。这段时间是否有可能从O(n)减少到O(1)?
到目前为止,我只想到了异步,但是我想尽可能不使用它。
答案 0 :(得分:1)
如果您可以创建一组固定的子进程,即一个组有3 / n个进程,然后选择一个组并转发给所有进程,则可以考虑为每个子进程集使用一个多播IP /套接字。
或者如果子处理开销不是很在意,则可以使所有子进程在同一个多播组上进行侦听,这意味着所有子进程都从主进程获取所有消息并检查message参数以确定该消息是否针对该消息。是否。
多播IP进行第2层广播,因此数据包仅在网络上发送一次,并且多播组中的所有套接字同时读取同一消息。