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

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

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

7 ответов

14 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта