是否可以在恒定时间内将一条消息发送到多个接收套接字?
Is it possible to send one message to multiple receiving sockets in constant time?
这更笼统,但我最近需要通过 python 中的 UNIX 域套接字将通过 WebSocket API 接收到的大量消息发送到多个子进程。纯线程别无选择,因为我需要真正的并发性(希望我没有将它与并行性混淆),因此只剩下进程。在主进程和子进程之间共享内存比让所有进程只监听自己的套接字引入了更大的开销。
程序如下所示:
- 主进程中的线程侦听传入的 WebSocket 消息并将它们放入队列中
- 主进程忙转并检查队列中的新消息,如果有,它会将其发送给多个(可能大约 3-4 个)子进程。
分析上述脚本后,我发现每个子进程发送一条消息大约需要 3 毫秒。考虑到对高吞吐量的需求,我宁愿每条消息等待 3 毫秒,也不愿在 3 个子进程的情况下等待 9 毫秒。有没有可能把这个时间从 O(n) 缩短到 O(1)?
到目前为止我只想到了 async,但我想尽可能不要使用它。
如果您可以创建一组固定的子进程,即一组有 3/n 个进程,您选择一组并转发给所有进程,那么,您可以考虑为每个子进程使用一个多播 IP/sockets放。
或者,如果子进程开销不是很重要,您可以让所有子进程监听同一个多播组,这意味着所有子进程都从主进程获取所有消息,并检查消息参数以确定消息是否是预期的不管是不是。
多播 IP 进行第 2 层广播,因此数据包仅在线路上发送一次,多播组中的所有套接字同时读取相同的消息。
这更笼统,但我最近需要通过 python 中的 UNIX 域套接字将通过 WebSocket API 接收到的大量消息发送到多个子进程。纯线程别无选择,因为我需要真正的并发性(希望我没有将它与并行性混淆),因此只剩下进程。在主进程和子进程之间共享内存比让所有进程只监听自己的套接字引入了更大的开销。
程序如下所示:
- 主进程中的线程侦听传入的 WebSocket 消息并将它们放入队列中
- 主进程忙转并检查队列中的新消息,如果有,它会将其发送给多个(可能大约 3-4 个)子进程。
分析上述脚本后,我发现每个子进程发送一条消息大约需要 3 毫秒。考虑到对高吞吐量的需求,我宁愿每条消息等待 3 毫秒,也不愿在 3 个子进程的情况下等待 9 毫秒。有没有可能把这个时间从 O(n) 缩短到 O(1)?
到目前为止我只想到了 async,但我想尽可能不要使用它。
如果您可以创建一组固定的子进程,即一组有 3/n 个进程,您选择一组并转发给所有进程,那么,您可以考虑为每个子进程使用一个多播 IP/sockets放。
或者,如果子进程开销不是很重要,您可以让所有子进程监听同一个多播组,这意味着所有子进程都从主进程获取所有消息,并检查消息参数以确定消息是否是预期的不管是不是。
多播 IP 进行第 2 层广播,因此数据包仅在线路上发送一次,多播组中的所有套接字同时读取相同的消息。