Q: как сделать этот процесс быстрее?
A: Нам нужны обе КОММУНИКАЦИИ и ОБРАБАТЫВАТЬ быстрее
Если вы чувствуете ZeroMQКонцепция является новой для вас и может быть немного сложно освоить для вашей будущей работы, вы можете рассмотреть ключевые функции концепции в этом [Принципы иерархии ZeroMQ менее чем за пять секунд ]
a) всегда можно улучшить возможности обработки, связанные со связью, с помощью экземпляра ядра системы Context( nIoTHREADs )
, имеющего nIoTHREADs >> 1
b) при технически проверенной необходимости можно выгрузить каждый поток обработки с помощью достаточно эффективно спроектированной локальной инфраструктуры обмена сообщениями между процессами (чтобы разгрузить коммуникации отспецифичная для потока обработка) с использованием протокола inproc://
без стекового протокола от каждого потока обработки до "центрального" коммуникатора перекачки данных (Context
-экземпляр (ы) может совместно использоваться потоками, в то время как Socket
-инстанции не могут - это ZeroMQ Zen-of-Zero, по замыслу).Таким образом, каждый поток обработки не блокирует и не изолирует ценные ресурсы, предоставляемые таким образом для более высоких мощностей коммуникатора с «центральной» перекачкой данных, и может «делегировать» части рабочей нагрузки, связанные с передачей данных, «центральной» перекачке данных,используя самую легкую философию «забывай и забывай» в потоках обработки, одновременно позволяя Коммуникатору обрабатывать и управлять всеми потенциальными интеллектуальными функциями, такими как сигнализация ACK / NACK на уровне приложения для отброшенных сообщений, масштабирование пропускной способности услуги на лету имногие аналогичные функции, которые каждый инженер по настройке производительности будет любить иметь.
c) Можно, при технически обозначенной необходимости, повысить производительность принимающей стороны (сторона PULL
) наиспользуя пул PULL
-приемников и сделайте сторону PUSH
-er равной .connect()
каждому из них.Внутренняя механика экземпляра PUSH
-side Context
будет нуждаться в хорошо смазанной (хорошо параметризованной) конфигурации для нескольких исходящих каналов ввода-вывода, однако, если производительность обработки PULL
-ers на удаленной стороне была блокирующей,это увеличенная и масштабируемая емкость пула - путь, конечно, не в том случае, когда ресурсы на стороне PULL
уже размещены на одном аппаратном узле с отправителями, причем оба находятся уже на пределе доступной обработкивозможности (образ мышления ZeroMQ всегда скорее распределен, чем расположение агентов обработки на одном локальном оборудовании / ОС - это свобода евангелизации Zen-of-Zero и основа для почти линейной производительностимасштабируемость).