В настоящее время я разрабатываю систему с сервером, которая выполняет задачи некоторых клиентов и обрабатывает их.Клиенты ZMQ - Сервер - Производительность рабочего стола
Поскольку мне нужна высокая пропускная способность, я изучил скорость для круговых переходов в сети 1 Гбит.
Сценарий:
- Клиенты имеют сокет дилера и отправить задание на сервер, сервер получает задания с сокетом Router (TCP-соединения)
- Сервер fowards Задачи для один работник-нить (дилер - дилер с помощью InProc)
- рабочий поток обрабатывает задания и отправляет ответ обратно по тому же пути
Я использовал 16 клиентов на 16 машинах для теста.
Тест 1: (без рабочих, сервер посылает сообщение непосредственно обратно к клиентам) Результат:
- 1B-сообщений: 143540,67 RT/с (RT = в обе стороны)
- 10B : 140160,72-сообщения RT/сек
- 100B-сообщения: 129634,43 RT/сек
- 500B-сообщения: 120977,5 RT/сек
- -1024b валики сообщения: 107983,59 RT/с
Тест 2: (с 10 work0ers, сервер просто выступает в качестве брокера)
- 1B-сообщений: 92873,51 RT/с (RT = в обе стороны)
- 10b-сообщения : 81619,33 RT/сек
- 100B-сообщения: 83606,02 RT/сек
- 500B-сообщений: 75229,45 RT/сек
- -1024b валиков сообщений: 63648,32 RT/с
Источники:
- http://pastebin.com/5JBD0DUH (Benchmark 1)
- http://pastebin.com/3iq2Bxqc (Benchmark 2)
Может кто-то помочь мне определить, почему TP идет вниз, что много с просто добавить inproc-roundtrip с некоторой рабочей нитью? Я действительно ожидал повышения TP с рабочими потоками. Является ли производительность ZMQ Inproc не такой быстрой?