美文网首页
生产者消费者模型

生产者消费者模型

作者: o翻滚的牛宝宝o | 来源:发表于2021-05-31 11:00 被阅读0次

背景

最近在做视频播放器开发,学习了ffmpeg中自带播放器demo,里面的生产者消费者开发模式令我影响深刻,所以写一篇文章记录一下。

设计模型介绍

生产者消费者模式大致结构如下:


生产者消费者.png

某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。

在实际开发中,由于生产数据和处理数据往往不在同一个线程或者进程,所以缓冲区的作用就体现出来。如果生产快了,那么就可以先把来不及消费的数据存储到缓冲区,达到缓冲上限就暂停生产,等消费者取出数据再开始生产。如果生产者的速度时快时慢,缓冲区还能起到稳定的作用,保证消费者获取数据稳定。

这种设计模式最大的好处就是支持忙闲不均

生产者/消费者模型运用

下面我们再来说说在iOS中如何运用生产者/消费者模型。我们还是以视频播放器为例子。视频播放主要分为2部分,将文件解码成帧,再用帧显示在界面上。解码出帧这个过程我们看做是生产区,将帧显示在界面上,我们看做是消费区,而中间,我们开一个队列去存储帧,这个就是缓冲区。下面就是一个简单的视频播放器的核心思路。


视频播放器原理.png

看完设计思路,我们再来看看代码上的实现。缓冲区的队列会在不同的线程进行存储和取出,因此需要加锁保证线程安全。这里我们采用C中的pthread_cond和pthread_mutex进行实现。伪代码如下:


伪代码.png

可能很多人对c的代码不熟悉,那么我们翻译成oc的锁和信号量来看这段代码:


伪代码2.png

demo

这里我写了一个比较简单的视频播放器设计代码,其中有上面所说的具体实现代码。地址:https://github.com/NBaby/Producer-and-consumer

相关文章

  • 34.Python之生产者消费者模型

    Python之生产者消费者模型(非常重要) 生产者消费者模型模型指的是一种解决问题的套路。 生产者消费者模型中包含...

  • 生产者和消费者模型

    生产者和消费者模型 1. 什么是生产者和消费者模型 生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者...

  • 生产者消费者(一)

    生产者消费者模型: 生产者------> 缓存<-------- 消费者

  • Future

    Future 模式只是生产者-消费者模型的扩展。经典“生产者-消费者”模型中消息的生产者不关心消费者何时处理完该条...

  • python入门开发学习笔记之掌握什么是生产者消费者模型

    本节重点 熟练掌握什么是生产者消费者模型熟练掌握为什么要用生产者消费者模型熟练掌握如何实现生产者消费者模型本节时长...

  • wait/notify实现生产者消费者(6)

    生产者消费者模型 生产者消费者模型是一个典型的多线程问题,涉及生产者、消费者、产品仓库。生产者生产的产品放入仓库中...

  • 生产者消费者

    生产者/消费者模式(阻塞队列) 生产者消费者模型的实现

  • 生产者消费者模型示例

    生产者消费者模型Main provider(生产者) Consumer(消费者) Data数据 log信息

  • 生产者消费者模型Java实现

    生产者消费者模型 生产者消费者模型可以描述为:①生产者持续生产,直到仓库放满产品,则停止生产进入等待状态;仓库不满...

  • 生产者与消费者模型

    生产者与消费者模型 通过使用Object的wait(),notify()方法进行生产者与消费者模型中出现的数据同步...

网友评论

      本文标题:生产者消费者模型

      本文链接:https://www.haomeiwen.com/subject/lpovsltx.html