Асинхронный однопоточный vs синхронный многопоточный для разработки сетевого протокола?

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

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

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

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

2
nl ja de
Существует третий вариант: асинхронный многопоточный с одним потоком на процессор.
добавлено автор usr, источник

1 ответы

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

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

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

5
добавлено
В итоге мы пошли на голосование, а асинхронная модель обрезала потоки с 4 по 3 :)
добавлено автор Gearoid Murphy, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

ntwrk
ntwrk
1 773 участник(ов)

Группа для сетевых инженеров Создатель группы: @HelloSadness Админы: @darwinggl @mxssl @Sk1f3r @blademd @gngbng

RU.SYSADMIN — Олды здесь?
RU.SYSADMIN — Олды здесь?
1 616 участник(ов)

Ламповая конференция сисадминов! Правила: http://telegra.ph/Pravila-ru-sysadmin-12-01 Список интересных групп и каналов: https://github.com/goq/telegram-list

Pro Telecom
Pro Telecom
884 участник(ов)

Добро пожаловать, связисты! Запрещена реклама чатов Cообщество для своих - https://www.facebook.com/groups/protelecom/ https://vk.com/telecomrf

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

pro.enterprise
pro.enterprise
346 участник(ов)

Темы обсуждения: Сервера, системы хранения данных, hardware, software, сети хранения данных, сетевое оборудование, облачные инфраструктуры и никакой политики.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest