Проблема производитель-потребитель


В вычислительной технике проблема производителя-потребителя (также известная как проблема ограниченного буфера ) представляет собой семейство проблем, описанных Эдсгером В. Дейкстрой с 1965 года. В производстве товаров, логистике или управлении цепочками поставокпроблема тоже известна. Временное хранение может быть размещено в производственном процессе. При краткосрочной приемке товара они служат буфером между двумя производственными участками. Промежуточное хранилище может иметь неограниченную емкость, то есть неограниченный буфер, или может иметь ограниченную емкость, то есть ограниченный буфер. Если временное хранилище заполнено, вышестоящая производственная станция должна остановить производство. Если временное хранилище пусто, нижестоящей производственной станции делать нечего.

Дейкстра нашел решение проблемы «производитель-потребитель», работая консультантом по компьютерам Electrologica X1 и X8: «Первое использование производителя-потребителя было частично программным, частично аппаратным: компонент, обеспечивающий передачу информации между магазином и магазином. периферийное устройство называлось «каналом»… Синхронизация контролировалась двумя счетными семафорами в том, что мы теперь знаем как устройство производитель/потребитель: один семафор, указывающий длину очереди, увеличивался (в V) ЦП и уменьшается (в P) каналом, другой, подсчитывая количество неподтвержденных завершений, увеличивается каналом и уменьшается ЦП. [Второй положительный семафор поднимает соответствующий флаг прерывания.]" [1]

Дейкстра писал о случае неограниченного буфера: «Мы рассматриваем два процесса, которые называются «производитель» и «потребитель» соответственно. Производитель — это циклический процесс, и каждый раз, когда он проходит свой цикл, он производит определенную порцию информации, которая должна быть обработана потребителем.Потребитель также является циклическим процессом, и каждый раз, когда он проходит свой цикл, он может обрабатывать следующую порцию информации, как это было произведено производителем ... Мы предполагаем, что два процесса быть подключен для этой цели через буфер с неограниченной емкостью». [2]

Он писал о случае ограниченного буфера: «Мы изучили производителя и потребителя, связанных через буфер с неограниченной емкостью... Отношение становится симметричным, если они связаны через буфер конечного размера, скажем, N порций» [3] . ]

И о случае с несколькими производителями-потребителями: «Мы рассматриваем ряд пар производителей/потребителей, где пара i связана через информационный поток, содержащий n i порций. Мы предполагаем… конечный буфер, который должен содержать все порции всех потоков иметь вместимость «маленьких» порций». [4]

Пер Бринч Хансен и Никлаус Вирт вскоре увидели проблему семафоров: «Я пришел к тому же выводу в отношении семафоров, а именно, что они не подходят для языков более высокого уровня. Вместо этого естественными событиями синхронизации является обмен сообщениями ». [5]