2

Наша команда внедряет безопасный многоуровневый одноранговый протокол, который устанавливает соединения между узлами по нескольким промежуточным «перелетам» с использованием Boost/C++.Асинхронный однопоточный vs синхронный многопоточный для разработки сетевого протокола?

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

Я не хочу уклоняться от вопроса, перечисляя плюсы и минусы, но я очень заинтересован в опыте сообщества StackOverFlow в таких вопросах и какой подход они предпочитают?

Я понимаю, что это открытый вопрос, так что в идеале ответ не будет основан на анекдотических доказательствах, но будет получен из некоторой эмпирической или аналитической основы.

+2

Существует третий вариант: асинхронный многопоточный с одним потоком на процессор. – usr

ответ

5

Я бы рекомендовал асинхронный по двум причинам:

  • вам не нужно иметь дело с резьбовыми взаимодействиями, которые всегда минное поле ошибок;
  • вы можете использовать библиотеку Boost.Asio, чтобы обрабатывать все низкоуровневое планирование, управление соединением и т. Д. Это также упрощает использование нескольких потоков, если это необходимо по соображениям производительности.

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

+0

В итоге мы пошли на голосование, а асинхронная модель избила потоки с 4 по 3 :) –

Смежные вопросы