echo.hu

生产者消费者模式

生产者消费者模式

解决的问题:避免两个线程其中一个线程处理过快等待另外一个线程造成资源的浪费。

举个🌰

比如对图片的处理改变其冷暖色调时,往往用户可能需要进行多次频繁的参数调整,假如设置一次参数渲染图片的时间为1秒(当然肯定不会那么长时间,这是个🌰,这是个🌰),当用户拖动进度条从0拖到10时,处理的次数肯定超过十次,如果此时都在主线程处理,则处理时间肯定会超过十秒,这个很明显是不现实的,所以这个时候就需要生产者消费者模式了。

主线程作为->生产者:主要负责生产任务,即收集任务,比如上例中的渲染一次图片的任务。每次接收到任务时都把上一次的任务清空,直接处理最新数据,抛弃旧数据,让用户可以直接看到最新的处理结果。

异步全局线程作为->消费者:主要负责处理任务。消费者里面会有一个无限循环用于处理生产者生产的任务。

主要过程

主要的过程包括如下

1.初始化时全局异步线程处理代码块进入等待

2.主线程run,push代码块进入数组

3.激活全局异步线程对代码块进行处理

4.执行完pop出代码块,继续进入等待