1 поток против 5 потоков для распределенной системы связи? - PullRequest
0 голосов
/ 07 сентября 2018

Я изучаю прототип небольшой сетевой системы, который на самом низком уровне имеет один программный «родительский» процесс, который обменивается данными с 5 программными «дочерними» процессами.

Я использую ZeroMQ для связи между процессами.

Мой вопрос - это вопрос многопоточной обработки по сравнению с однопоточной обработкой.

В такой системе будет ли более эффективен один поток в родительском элементе, который обрабатывает отправку, получение и обработку сообщений дочерним элементам и от них, чем 5 потоков (1 поток на процесс)?

Для однопоточных, я обеспокоен тем, что хотя родительский процесс обрабатывает одно сообщение, сообщения начнут накапливаться.

Для многопоточных систем меня беспокоит переключение контекста и снижение производительности, если эта системная архитектура расширена. Подумайте о 50 родителях по 5 нитей за штуку, поэтому минимум 250 нитей.

Потоки записаны в Стандарты ZeroMQ без блокировок, критических разделов, разделяемой памяти и т. Д.

Я использую Linux и C ++.

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете запустить очередь сообщений на родительском объекте, что также должно позволить детям не перегружаться при обработке событий в порядке их поступления. Кроме того, вы можете расширить это до простой модели отправки-подтверждения, где дети будут ждать подтверждения своего сообщения перед отправкой дальнейших сообщений, так что вы можете позволить родителю контролировать скорость, с которой он получает сообщения.

Что касается количества запущенных потоков, я согласен с вами, так как по мере увеличения сложности родительская программа будет увеличиваться.

Основным фактором, на мой взгляд, будет то, должны ли потоки делиться какими-либо данными или обмениваться данными друг с другом. Если это не так, проблема упрощается, так как вы можете использовать 1 поток на 1 или более дочерних элементов и просто получать сообщения из очереди.

...