Привет,
Есть одна задачка на многопоточность в С++. Я её уже решил, но мне хочется узнать сколько способов реализации для таких задач можно придумать.
Вводные данные, С++ 17 и STL. Отклик системы должен быть как можно меньше, задержки связанные с блокироваками как можно меньше. Платформа не RTOS, так что компромиссы отклика понятны.
Надо написать скедулер некоторых команд которые выбрасывают несколько продьюсеров. Между командами в рамках одного продьюсера нужно добавлять конфигурируемую задержку Δt. Продьюсеры добавляются и удаляются динамически в любой момент времени. При создании такого скедулера ему передаётся некий интерфейс с методом, ну пусть будет processCommand и пусть он будет reentrant, в котором может произойти всё что угодно, например, заблокирвоаться какой-то мьютекс или добавится/удалится новый продьюсер. Чистый код на С++ не нужен, достаточно псевдокода с указанием нюансов реализации.
Здравствуйте, Kernan, Вы писали:
K>Есть одна задачка на многопоточность в С++. Я её уже решил, но мне хочется узнать сколько способов реализации для таких задач можно придумать. K>Вводные данные, С++ 17 и STL. Отклик системы должен быть как можно меньше, задержки связанные с блокироваками как можно меньше. Платформа не RTOS, так что компромиссы отклика понятны. K>Надо написать скедулер некоторых команд которые выбрасывают несколько продьюсеров. Между командами в рамках одного продьюсера нужно добавлять конфигурируемую задержку Δt. Продьюсеры добавляются и удаляются динамически в любой момент времени. При создании такого скедулера ему передаётся некий интерфейс с методом, ну пусть будет processCommand и пусть он будет reentrant, в котором может произойти всё что угодно, например, заблокирвоаться какой-то мьютекс или добавится/удалится новый продьюсер. Чистый код на С++ не нужен, достаточно псевдокода с указанием нюансов реализации.
Поствновка задачи огонь
Хочу незнаю че, но многопоточное и что бы быстро.
В такой постоновке даже не ясно зачем вам многопоточность.
>Платформа не RTOS, так что компромиссы отклика понятны.
Вообще не понятно что у вас за платформа, может это гетерогенный распределенный кластер.
Здравствуйте, Kernan, Вы писали:
K>Надо написать скедулер некоторых команд которые выбрасывают несколько продьюсеров. Между командами в рамках одного продьюсера нужно добавлять конфигурируемую задержку Δt. Продьюсеры добавляются и удаляются динамически в любой момент времени. При создании такого скедулера ему передаётся некий интерфейс с методом, ну пусть будет processCommand и пусть он будет reentrant, в котором может произойти всё что угодно, например, заблокирвоаться какой-то мьютекс или добавится/удалится новый продьюсер. Чистый код на С++ не нужен, достаточно псевдокода с указанием нюансов реализации.
Почему-то сразу вспомнился SObjectizer от одного из старожилов RSDN. Тоже многопоточка, обработка сообщений, producers-consumers... Проект сейчас на гитхабе вроде.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Почему-то сразу вспомнился SObjectizer от одного из старожилов RSDN. Тоже многопоточка, обработка сообщений, producers-consumers... Проект сейчас на гитхабе вроде.
Вопрос не в поиске свободной либы, а в том как можно это сделать самому и какими способами.
Здравствуйте, Kernan, Вы писали:
K>Здравствуйте, Mr.Delphist, Вы писали:
MD>>Почему-то сразу вспомнился SObjectizer от одного из старожилов RSDN. Тоже многопоточка, обработка сообщений, producers-consumers... Проект сейчас на гитхабе вроде. K>Вопрос не в поиске свободной либы, а в том как можно это сделать самому и какими способами.
Здравствуйте, Mr.Delphist, Вы писали:
K>>Вопрос не в поиске свободной либы, а в том как можно это сделать самому и какими способами.
MD>Исходники открыты, с примерами — можно как раз глянуть как сделано MD>https://github.com/eao197/so-5-5
По теме же вопроса ТСа остается только сказать, что а) постановка задачи выглядит не очень понятной (слишком уж она абстрактная) и b) непонятно зачем над этой задачей нужно ломать голову кому-то еще.