Это больше касается общей стороны, но в последнее время у меня возникла необходимость отправлять много сообщений, полученных через API WebSocket, нескольким дочерним процессам через доменные сокеты UNIX в python. Чистые потоки не являются альтернативой, поскольку мне нужен истинный параллелизм (надеюсь, я не путаю его с параллелизмом), поэтому остаются только процессы. Совместное использование памяти между основными и дочерними процессами приводит к большим издержкам, чем просто прослушивание всех их в своем собственном сокете.
Процедура выглядит следующим образом:
- Поток в основном процессе прослушивает входящие сообщения WebSocket и помещает их в очередь
- Главный процесс busy-spins и проверяет наличие новых сообщений в очереди, если он есть, он отправляет его нескольким (возможно, 3-4) дочерним процессам.
После профилирования приведенного выше сценария я обнаружил, что для отправки сообщения требуется около 3 мсек на дочерний процесс. Учитывая необходимость высокой пропускной способности, я бы предпочел подождать 3 мсек на сообщение, а не 9 мсек в случае 3 дочерних процессов. Будет ли возможность сократить это время с O (n) до O (1)?
Пока на ум приходит только асинхронность, но я бы не хотел использовать ее, если это возможно.