очередей итд. Много потоков ~ 100.
Какая реализация будет оптимальной ?
При помощи условных переменных или все же надежнее и проще мьютексы использовать ?
Если не для учебных целей — берём готовую реализацию из условного буста. Если для учебных — то обязательны и мьютексы, и условные переменные. Вторые требуют первых даже по API
Что такое "условный" буст ? Для промышленной эксплуатации 24/7. Главное чтобы не падало после недели непрерывной работы. Коммерческий высоко нагруженный проект. Один раз подняли месяц должен работать как минимум.
"Условный буст" - проверенные библиотеки, в том числе и boost
Забыл важную вещь уточнить по проекту. Пользовательский интерфейс на с++ писаться не будет. Основа проекта это сервисы взаимодействующие между собой. Не микросервисы. Для UI будет использоваться всякие там вью и реакты. Взаимодействие с ними будет по ресту и вебсокетам. В этом случае все равно Boost лучший выбор ?
с ходу очень сложно оценить, будет ли в каком-то неизвестном проекте буст работать месяц "поменяли один раз и 24/7". я бы заведомо оценил, что у него больше шансов, чем у многих, но кажется иллюзией. Буст имеет смысл взять и посмотреть. Если работать не будет, то разобраться и поменять, либо буст, либо на что-то другое перейти. Ну и требования "я хочу менять один раз и чтобы работало 24/7". А что так можно было что ли :)
Зависит от конкретных условий. Если давать совет только основываясь на этом описании, то можно сказать лишь общее "чем меньше блокировок, тем лучше". Какая коммуникационная архитектура? Какие данные? Как организовано распределение между обработчиками? Возможны ведь разные варианты. Навскидку: 1. все производители наваливают в одну очередь, из которой выгребают все обработчики 2. соотношение 1:1, т.е. между каждым производителем и обработчиком - отдельная очередь 3. у каждого обработчика своя очередь, в которую может сыпать данные любой из производителей Выбор в первом приближении зависит от характера данных - какое зерно параллелизма вы себе можете позволить (можно ли каждый элемент данных обрабатывать независимо от всех других), и насколько тяжёлая логика обработки (сколько нам надо обработчиков на одного производителя) Когда определитесь с архитектурой, скорее всего станет ясно, что выбрать. Если коммуникационные каналы будут только между двумя сторонами, то скорее всего стоит предпочесть простую блокировку с мьютексом. Если за очередь могут конкурировать одновременно несколько потоков производителей, то возможно лучше подойдёт неблокирующий вариант.
Большое спасибо за развёрнутый ответ. В основном продюсеры конкурируют за очереди. Выгребает один консьюмер и отдаёт через дешифраторы на обработку параллельным или последовательным программным процессорам. То есть на входе есть объекты с оператором и операндом. Программный процессор исполняет оператор с операндом и либо заканчивает обработку либо формирует новый операнд с оператором и ставит в очередь на дальнейшую обработку итд. Вот такая простая параллельная архитектура.
Обсуждают сегодня