170 похожих чатов

По Вашему опыту. Модель продюсер - консьюмер. Большой проект. Много разных

очередей итд. Много потоков ~ 100.
Какая реализация будет оптимальной ?
При помощи условных переменных или все же надежнее и проще мьютексы использовать ?

7 ответов

16 просмотров

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

Chu- Автор вопроса
Egor Suvorov
Если не для учебных целей — берём готовую реализац...

Что такое "условный" буст ? Для промышленной эксплуатации 24/7. Главное чтобы не падало после недели непрерывной работы. Коммерческий высоко нагруженный проект. Один раз подняли месяц должен работать как минимум.

Chu
Что такое "условный" буст ? Для промышленной экспл...

"Условный буст" - проверенные библиотеки, в том числе и boost

Chu- Автор вопроса
Chu
Что такое "условный" буст ? Для промышленной экспл...

Забыл важную вещь уточнить по проекту. Пользовательский интерфейс на с++ писаться не будет. Основа проекта это сервисы взаимодействующие между собой. Не микросервисы. Для UI будет использоваться всякие там вью и реакты. Взаимодействие с ними будет по ресту и вебсокетам. В этом случае все равно Boost лучший выбор ?

Chu
Что такое "условный" буст ? Для промышленной экспл...

с ходу очень сложно оценить, будет ли в каком-то неизвестном проекте буст работать месяц "поменяли один раз и 24/7". я бы заведомо оценил, что у него больше шансов, чем у многих, но кажется иллюзией. Буст имеет смысл взять и посмотреть. Если работать не будет, то разобраться и поменять, либо буст, либо на что-то другое перейти. Ну и требования "я хочу менять один раз и чтобы работало 24/7". А что так можно было что ли :)

Зависит от конкретных условий. Если давать совет только основываясь на этом описании, то можно сказать лишь общее "чем меньше блокировок, тем лучше". Какая коммуникационная архитектура? Какие данные? Как организовано распределение между обработчиками? Возможны ведь разные варианты. Навскидку: 1. все производители наваливают в одну очередь, из которой выгребают все обработчики 2. соотношение 1:1, т.е. между каждым производителем и обработчиком - отдельная очередь 3. у каждого обработчика своя очередь, в которую может сыпать данные любой из производителей Выбор в первом приближении зависит от характера данных - какое зерно параллелизма вы себе можете позволить (можно ли каждый элемент данных обрабатывать независимо от всех других), и насколько тяжёлая логика обработки (сколько нам надо обработчиков на одного производителя) Когда определитесь с архитектурой, скорее всего станет ясно, что выбрать. Если коммуникационные каналы будут только между двумя сторонами, то скорее всего стоит предпочесть простую блокировку с мьютексом. Если за очередь могут конкурировать одновременно несколько потоков производителей, то возможно лучше подойдёт неблокирующий вариант.

Chu- Автор вопроса
Anton
Зависит от конкретных условий. Если давать совет т...

Большое спасибо за развёрнутый ответ. В основном продюсеры конкурируют за очереди. Выгребает один консьюмер и отдаёт через дешифраторы на обработку параллельным или последовательным программным процессорам. То есть на входе есть объекты с оператором и операндом. Программный процессор исполняет оператор с операндом и либо заканчивает обработку либо формирует новый операнд с оператором и ставит в очередь на дальнейшую обработку итд. Вот такая простая параллельная архитектура.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта