Оптимальное решение для памяти и времени для решения проблемы производитель-потребитель с большими объемами данных - PullRequest
0 голосов
/ 30 января 2020

Я пишу многопоточную программу производителя-потребителя C, в которой потоки двух типов связывают элементы данных посредством структуры данных очереди с блокировкой потоков. Элементы данных - это указатели, которые указывают на большие блоки памяти. Для эффективности я хочу, чтобы производитель мог повторно использовать память элемента после того, как потребитель обработал его, то есть потребитель не будет тратить время на освобождение памяти после обработки элемента, а производитель не будет тратить время на выделение новой памяти. Кто-нибудь имеет опыт решения этой проблемы или видел решение в литературе?

В настоящее время я планирую использовать две очереди. Очередь 1 будет содержать элементы для обработки - производители будут писать, а потребители будут читать из этой очереди. Очередь 2 будет содержать элементы, которые уже обработаны и чья память может быть повторно использована - потребители будут писать, а производители будут читать из этой очереди. Программа начнет с фиксированным количеством элементов в очереди 2, что также ограничит общий объем используемой памяти. Является ли это наиболее эффективным решением без тупиков с учетом ограничений? Если нет, что было бы лучшим решением?

...