Как эффективно реализовать неблокирующую асинхронную очередь с приоритетами на C++ [closed]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как эффективно реализовать неблокирующую асинхронную очередь с приоритетами на C++ [closed]

Сообщение Anonymous »

Пытаюсь оптимизировать высоконагруженную систему обработки задач, где критически важна минимальная задержка. Нужна очередь, которая: Поддерживает приоритеты (например, высокий, средний, низкий). Гарантирует lock-free или хотя бы wait-free доступ для хотя бы некоторых операций.Корректно работает в многопоточной среде (продьюсеры-консьюмеры).Позволяет динамически добавлять/удалять задачи без полной блокировки. Пробовал комбинировать std::priority_queue с std::mutex, но это создает contention при высокой нагрузке. Также экспериментировал с boost::lockfree::queue, но она не поддерживает приоритеты. Что пытался сделать: Вариант с атомарными CAS (Compare-And-Swap): Пытался создать свою очередь на основе связного списка с атомарными указателями. Проблема: корректная вставка с учетом приоритетов без блокировок оказалась сложнее, чем ожидалось. Использование std::atomic и std::memory_order: Пробовал реализовать что-то похожее на алгоритм Michael & Scott, но с приоритетами. Столкнулся с проблемами ABA (особенно в 32-битных системах). Гибридный подход (блокировки только для изменения приоритетов): Отдельный мьютекс для изменения порядка задач, но это снижает производительность.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/796 ... bd%d0%b0-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»