1.简单结构
注:缓存区的作用主要用于生产者于消费者解耦并且当 某一时间段中生产速率大于消费速度时保证生产者不阻塞并且数据不丢失
2.数据模拟
• 生产者:– Vp(单位生产速度),Np(生产者个数)
• 消费者:
– Vc(单位消费速度),Np(消费者个数)
• 缓冲区:
– Smax(缓冲区大小),Sinit(初始容量)
• 生产者生产总量:(Vp*Np)*T
• 消费者消费总量:(Vc*Nc)*T
• 缓冲区数量增长速度:(Vp*Np- Vc*Nc)
• 缓冲区中剩余数量:(Vp*Np- Vc*Nc)T
• 数据在缓冲区中的滞留时间:(Vp*Np/ Vc*Nc-1)T(缓冲数量/消费速度)
• Vp*Np>Vc*Nc(供大于求)
• 说明:
– 生产速度大于消费速度,由此会导致缓冲区数据堆积无法存入数据,最终导致生产者闲置
• Vp*Np<Vc*Nc(供小于求)
• 说明:
– 生产速度小于消费速度,由此会导致缓冲区无资源滞留,消费者很难争取到资源,最终导致消费者闲置
• Vp*Np=Vc*Nc(供等于求)
• 说明
– 生产速度等于消费速度,缓冲区数据量平稳,无生产者或消费者闲置
数据模拟计算1
• 总生产速度:=10/ms• 总消费速度:=9/ms
• 数据大小:1k
• 缓冲区大小:=100000
• 缓冲区增长速度:=(10-9)/ms=1/ms
• 缓冲区满值时间:=(100000/(10-9))ms=100s
• 数据在缓冲区滞留时间:0<t<(100000/9)ms=11111ms=11s
• 数据大小:100000k=100M
数据模拟计算2
• 总生产速度:=9/ms• 总消费速度:=10/ms
• 缓冲区大小:=100000
• 缓冲区增长速度:=(9-10)/ms=-1/ms(不增长)
• 缓冲区满值时间:(无限延期)
• 数据在缓冲区滞留时间:(趋近于0)
生产者消费者模式链
– 其中生产者也作为消费者,需要等待上一级提供资源,类似工厂流水线
• 由上面生产和消费速度可以得出,在处理最
慢的环节会导致在其之上的环节都会由于
速度大于他而导致生产过剩闲置,之下环节
资源不足而闲置( 木桶短板效应-------个人觉得更像沙漏状 )
结论
• 1.生产者消费者模式中总生产速度与总消费速度达到相对平衡可以减少系统资源浪费• 2.在无法达到相对平衡速度时,让消费速度大于生产速度,虽然消费者会闲置,但是可以减少数据滞留时间
• 3.在生产者消费者模式链中找到处理最慢环节加以优化可以提升系统性能
• 4.在系统性能已达标的情况下减少除最慢环节意外部分的线程数可以减少系统资源消耗(多线程模式)
补充
• 生产者消费者模式的缺点– 如果缓存模块挂死,即缓存资源全部丢失(如:一个大小为100缓冲区,在数据满的时候挂死,这就意味这个100个指令不会正确执行).
(第一次就交代到这里了,,排版很丑不喜勿喷,如果有不对的地方请斧正)