JS实现生产者消费者模式的理解实例

简要
通过缓存,去中心化,降低耦合度,在这个模型中,最关键就是内存缓冲区为空的时候消费者必须等待,而内存缓冲区满的时候,生产者必须等待,从而达到动态平衡,该实例主要是关注实现这一点

体验网址
http://www.oujin.fun/#/ProPage
ps:该网页是移动版适配,如有不适。请自行F12切换到移动版
效果图
这里写图片描述

实现思路
1

/*定义全局数组当做缓存仓库*/
var factoryCapacity=new Array();

2定义两个计时函数,分别实现生产操作,和消费操作

  console.log("prorate=="+prorate+","+"conrate=="+conrate)
        /*定义一个定时函数,如果仓库未满,按照生产速率往仓库塞值*/
        this.proTimer = setInterval(
            () => this.add()
            ,prorate)
        /*定义一个定时函数,如果仓库未空,按照生产速率往仓库取值*/
        this.conTimer = setInterval(
            () => this.remove()
            ,conrate)

3,控制工厂容量保护

add(){
        if(factoryCapacity.length<this.state.factory){
            factoryCapacity.push("1");
            this.setState({
                fac: "容量为"+factoryCapacity.length,
                pro:"生产中"
            });
        }else {
            this.setState({
                fac: "工厂已满",
                pro:"暂停生产"
            });

        }
    }
    remove(){
        if(factoryCapacity.length>0){
            factoryCapacity.shift ()
            this.setState({
                fac: "容量为"+factoryCapacity.length,
                con:"消费中"
            });
        /* console.log("r工厂容量为"+factoryCapacity.length)*/
        }else {
            this.setState({
                fac: "工厂已空",
                con:"停止消费"
            });

        }
    }

具体思路很简单,但还是有很多很多的小细节需要注意
代码地址
https://github.com/oujin-nb/sysPage

猜你喜欢

转载自blog.csdn.net/weixin_39168678/article/details/80339910