Алгоритм производителей-потребителей

Алгоритм производителей-потребителей

Еще один многопоточный алгоритм, тесно связанный с проблемой потоков считывания и записи - алгоритм, решающий проблему производителей и потребителей.

Этот раздел адресован только тем программистам, которые работают в среде 32-раздядной Windows. Delphi I вообще не поддерживает многопоточную обработку, в то время как Kylix и Linux не предоставляют необходимых примитивных объектов синхронизации, с помощью которых можно было бы решить проблему производителей-потребителей.

В этой ситуации имеется один или более потоков, создающих данные (их называют производителями (producers)), которые будут использоваться или потребляться одним или большим количеством других потоков (называемых потребителями (consumers)). Как видите, эта задача тесно связана с алгоритмом потоков считывания-записи: потребителей можно считать потоками считывания данных, записанных производителями. Примером использования этого алгоритма может послужить программа потокового видео: в этом случае будет существовать поток, который загружает видео из какого-то Web-сайта, и поток, который воспроизводит загруженное видео. Ни один из этих потоков не должен беспокоиться о том, что должен делать второй.

Мы сымитируем этот процесс подпрограммой копирования нескольких потоков. Производитель будет копировать данные из потока в очередь буферов. Затем потребитель будет копировать данные из буферов в другой поток. Например, мог бы существовать производитель, считывающий несжатые данные из потока, и два потребителя данных: один, сжимающий данные в другой поток с помощью одного алгоритма, и второй, сжимающий их с помощью другого алгоритма, что теоретически позволяет выбирать более плотно упакованные данные. В этом случае производитель может продолжать работу и пытаться максимально быстро заполнять буфера в очереди, а потребители, в свою очередь, могут пытаться максимально быстро их считывать. Работа производителя будет тормозиться, если потребители работают недостаточно быстро и очередь заполняется непрочитанными буферами. Аналогично, работа потребителей будет замедляться, если производитель работает медленно и очередь опустошается.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

8.1.1 Алгоритм

Из книги автора

8.1.1 Алгоритм Сразу после переключения контекста ядро запускает алгоритм планирования выполнения процессов (Рисунок 8.1), выбирая на выполнение процесс с наивысшим приоритетом среди процессов, находящихся в состояниях "резервирования" и "готовности к выполнению, будучи


I.4 Реализации с использованием оборудования различных производителей

Из книги автора

I.4 Реализации с использованием оборудования различных производителей В отличие от использовавшихся ранее лицензионных сетевых протоколов TCP/IP реализованы на компьютерах различных производителей и могут использовать программное обеспечение независимых


1.7.3 RFC и стимулирование сетевого взаимодействия продуктов различных производителей

Из книги автора

1.7.3 RFC и стимулирование сетевого взаимодействия продуктов различных производителей То, что пользователи не должны придерживаться только одной компьютерной архитектуры, стало главной причиной одобрения TCP/IP в качестве коммуникационных стандартов правительственными


10.6. Задача производителей и потребителей

Из книги автора

10.6. Задача производителей и потребителей В разделе 7.3 мы описали суть задачи производителей и потребителей и привели несколько возможных ее решений, в которых несколько потоков-производителей заполняли массив, который обрабатывался одним потоком-потребителем.1. В нашем


10.9. Несколько производителей, один потребитель

Из книги автора

10.9. Несколько производителей, один потребитель Решение в разделе 10.6 относится к классической задаче с одним производителем и одним потребителем. Новая, интересная модификация программы позволит нескольким производителям работать с одним потребителем. Начнем с решения


10.10. Несколько производителей, несколько потребителей

Из книги автора

10.10. Несколько производителей, несколько потребителей Следующее изменение, которое мы внесем в нашу пpoгрaммy, будет заключаться в добавлении возможности одновременной работы нескольких потребителей вместе с несколькими производителями. Есть ли смысл в наличии


Поставщики данных других производителей

Из книги автора

Поставщики данных других производителей Вдобавок к поставщикам данных, предлагаемым компанией Microsoft, существуют поставщики данных других производителей, предназначенные для самых разных, как свободно доступных, так и коммерческих баз данных. В табл. 22.3 указано, где


Глава 7 Инструменты и библиотеки сторонних производителей

Из книги автора

Глава 7 Инструменты и библиотеки сторонних производителей Поскольку практически все программы, которые будут рассмотрены в данном разделе, не имеют официальных дистрибьюторов и не распространяются на CD-ROM, описание каждой программы будет начинаться с адреса сайта


Алгоритм max()

Из книги автора

Алгоритм max() template class Type const Type&max( const Type &aval, const Type &bval );template class Type, class Compare const Type&max( const Type &aval, const Type &bval, Compare comp );max() возвращает наибольшее из двух значений aval и bval. В первом варианте используется оператор "больше", определенный в классе Type; во втором - операция


Алгоритм min()

Из книги автора

Алгоритм min() template class Type const Type&min( const Type &aval, const Type &bval );template class Type, class Compare const Type&min( const Type &aval, const Type &bval, Compare comp );min() возвращает меньшее из двух значений aval и bval. В первом варианте используется оператор “меньше”, определенный для типа Type; во втором - операция


Алгоритм partial_sort()

Из книги автора

Алгоритм partial_sort() template class RandomAccessIterator voidpartial_sort( RandomAccessIterator first,RandomAccessIterator middle,RandomAccessIterator last );templatepartial_sort() сортирует часть последовательности, укладывающуюся в диапазон [first,middle). Элементы в диапазоне [middle,last) остаются неотсортированными. Например, если дан массивint ia[] =


Официальные сайты компаний-производителей и основных марок ноутбуков

Из книги автора

Официальные сайты компаний-производителей и основных марок ноутбуков Acer – www.acer.ru.Apple – www.apple.ru.ASUS – www.asusnb.ru.Bliss (торговая марка компании «Нексус») – www.bliss.ru.Dell – www.dell.ru.Fujitsu Siemens – www.fujitsu-siemens.ru.Hewlett-Packard – http://www.hp.com/country/ru/rus/welcome.html.IBM – http://www.ibm.com/ru.iRU (торговая марк©а компании


Сайты крупнейших производителей периферийных устройств, комплектующих и аксессуаров для ноутбуков

Из книги автора

Сайты крупнейших производителей периферийных устройств, комплектующих и аксессуаров для ноутбуков Addonics – www.addonics.com – внешние накопители и др.AMD – www.amd.ru – процессоры.ATI – www.ati.com/ru/ – видеочипы.D-Link – www.dlink.ru – LAN-карты, модемы.Intel – www.intel.ru – процессоры, сетевые решения.Iomega


Программы производителей мобильных телефонов

Из книги автора

Программы производителей мобильных телефонов Количество программ от компаний-производителей мобильных телефонов приблизительно соответствует числу этих компаний. По мере выпуска новых моделей телефонов выходят очередные версии или обновления программ, но названия,


О Microsoft, свободе выбора, печали гиков, чаяниях потребителей и radix malorum Сергей Голубицкий

Из книги автора

О Microsoft, свободе выбора, печали гиков, чаяниях потребителей и radix malorum Сергей Голубицкий Опубликовано 23 января 2014 Сегодня Microsoft отчитывается перед акционерами о квартальных достижениях, поэтому, пользуясь удобной оказией, беру алаверды у Жени