Задачка на многопоточность
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 26.04.22 10:49
Оценка: -1
Привет,
Есть одна задачка на многопоточность в С++. Я её уже решил, но мне хочется узнать сколько способов реализации для таких задач можно придумать.
Вводные данные, С++ 17 и STL. Отклик системы должен быть как можно меньше, задержки связанные с блокироваками как можно меньше. Платформа не RTOS, так что компромиссы отклика понятны.
Надо написать скедулер некоторых команд которые выбрасывают несколько продьюсеров. Между командами в рамках одного продьюсера нужно добавлять конфигурируемую задержку Δt. Продьюсеры добавляются и удаляются динамически в любой момент времени. При создании такого скедулера ему передаётся некий интерфейс с методом, ну пусть будет processCommand и пусть он будет reentrant, в котором может произойти всё что угодно, например, заблокирвоаться какой-то мьютекс или добавится/удалится новый продьюсер. Чистый код на С++ не нужен, достаточно псевдокода с указанием нюансов реализации.
Sic luceat lux!
Re: Задачка на многопоточность
От: kov_serg Россия  
Дата: 26.04.22 10:58
Оценка: +1
Здравствуйте, Kernan, Вы писали:

K>Есть одна задачка на многопоточность в С++. Я её уже решил, но мне хочется узнать сколько способов реализации для таких задач можно придумать.

K>Вводные данные, С++ 17 и STL. Отклик системы должен быть как можно меньше, задержки связанные с блокироваками как можно меньше. Платформа не RTOS, так что компромиссы отклика понятны.
K>Надо написать скедулер некоторых команд которые выбрасывают несколько продьюсеров. Между командами в рамках одного продьюсера нужно добавлять конфигурируемую задержку Δt. Продьюсеры добавляются и удаляются динамически в любой момент времени. При создании такого скедулера ему передаётся некий интерфейс с методом, ну пусть будет processCommand и пусть он будет reentrant, в котором может произойти всё что угодно, например, заблокирвоаться какой-то мьютекс или добавится/удалится новый продьюсер. Чистый код на С++ не нужен, достаточно псевдокода с указанием нюансов реализации.

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

>Платформа не RTOS, так что компромиссы отклика понятны.

Вообще не понятно что у вас за платформа, может это гетерогенный распределенный кластер.
Re: Задачка на многопоточность
От: Mr.Delphist  
Дата: 26.04.22 16:33
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Надо написать скедулер некоторых команд которые выбрасывают несколько продьюсеров. Между командами в рамках одного продьюсера нужно добавлять конфигурируемую задержку Δt. Продьюсеры добавляются и удаляются динамически в любой момент времени. При создании такого скедулера ему передаётся некий интерфейс с методом, ну пусть будет processCommand и пусть он будет reentrant, в котором может произойти всё что угодно, например, заблокирвоаться какой-то мьютекс или добавится/удалится новый продьюсер. Чистый код на С++ не нужен, достаточно псевдокода с указанием нюансов реализации.


Почему-то сразу вспомнился SObjectizer от одного из старожилов RSDN. Тоже многопоточка, обработка сообщений, producers-consumers... Проект сейчас на гитхабе вроде.
Re[2]: Задачка на многопоточность
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 26.04.22 17:29
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Почему-то сразу вспомнился SObjectizer от одного из старожилов RSDN. Тоже многопоточка, обработка сообщений, producers-consumers... Проект сейчас на гитхабе вроде.

Вопрос не в поиске свободной либы, а в том как можно это сделать самому и какими способами.
Sic luceat lux!
Re[3]: Задачка на многопоточность
От: Mr.Delphist  
Дата: 27.04.22 08:15
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, Mr.Delphist, Вы писали:


MD>>Почему-то сразу вспомнился SObjectizer от одного из старожилов RSDN. Тоже многопоточка, обработка сообщений, producers-consumers... Проект сейчас на гитхабе вроде.

K>Вопрос не в поиске свободной либы, а в том как можно это сделать самому и какими способами.

Исходники открыты, с примерами — можно как раз глянуть как сделано
https://github.com/eao197/so-5-5
Re[4]: Задачка на многопоточность
От: so5team https://stiffstream.com
Дата: 27.04.22 08:32
Оценка: 1 (1) +3
Здравствуйте, Mr.Delphist, Вы писали:

K>>Вопрос не в поиске свободной либы, а в том как можно это сделать самому и какими способами.


MD>Исходники открыты, с примерами — можно как раз глянуть как сделано

MD>https://github.com/eao197/so-5-5

Это старая версия, новая живет здесь: https://github.com/Stiffstream/sobjectizer

По теме же вопроса ТСа остается только сказать, что а) постановка задачи выглядит не очень понятной (слишком уж она абстрактная) и b) непонятно зачем над этой задачей нужно ломать голову кому-то еще.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.