Если производитель является магистралью, вне рампы является ограниченным буфером, а локальная трасса является потребителем, тогда вы можете думать о пропускной способности данных как о форме потока трафика.
Если автомагистраль питает выездную рампу быстрее, чем транспортные средства могут проехать по боковой улице, тогда ваша выездная рампа заполнится. Если шоссе движется по съезду медленнее, чем транспортные средства могут въехать на боковую улицу, на боковой улице иногда не будет движения с шоссе. Если выездная рампа заполнится, часть движения либо вернется на шоссе, либо будет вынуждена использовать альтернативный выезд с шоссе.
Шаблон производитель-потребитель имеет похожее поведение. Если производитель записывает данные в ограниченный буфер быстрее, чем потребитель читает данные из ограниченного буфера, буфер заполнит. Когда буфер заполняется, либо производитель должен ждать места в буфере, чтобы записать новые значения в буфер. Когда буфер очищается, потребитель должен ждать, пока данные будут доступны в буфере, прежде чем потребитель сможет читать из буфера.
Здесь аналогия начинает подводить нас. Шаблоны производитель-потребитель могут блокироваться, чтобы гарантировать, что все данные, произведенные производителем, потребляются потребителем. Однако также возможно разработать шаблон «производитель-потребитель», который признает, что производитель всегда будет быстрее, чем потребитель, и, следовательно, потребитель никогда не будет обрабатывать все данные, созданные в непрерывной системе. В этом случае производитель должен иметь возможность перезаписать некоторые данные до того, как потребитель прочитает данные. Это известно как система отбора проб. Потребитель читает только выборку данных, а не каждое значение данных.
Примером системы отбора проб может быть система управления двигателем. Датчики, контролирующие давление в цилиндре, могут генерировать данные со скоростью одного считывания в миллисекунду или 1000 раз в секунду, но органы управления клапаном двигателя могут реагировать только на давление в цилиндре со скоростью 500 раз в секунду. Если бы ограниченный буфер был бесконечно большим, потребитель (органы управления клапаном) всегда имел бы дело с очень старыми данными, в результате чего двигатель реагировал на давление в цилиндре за несколько секунд в прошлом. Двигатель выйдет из-под контроля. Если вместо этого органы управления клапаном считывают только самые последние данные, игнорируя любые данные между последним показанием и текущим показанием, двигатель может поддерживать надлежащий контроль. Он никогда не будет иметь дело с устаревшими данными.
Производителю-потребителю, использующему буфер выборки, часто требуется только один элементный буфер. Производитель пишет в буфер с естественной скоростью. Потребитель читает данные в естественном темпе. При использовании одноэлементного буфера потребитель гарантированно увидит только самое последнее значение в буфере. Все промежуточные значения даже не видны потребителю.