当前位置: 首页 > news >正文

南阳网站建设页面色盲测试图

南阳网站建设页面,色盲测试图,网站照片上传不了怎么办,招远网站建设公司目录 阻塞队列 消息队列 阻塞队列用于生产者消费者模型 概念 实现原理 生产者消费者主要优势 缺陷 阻塞队列的实现 1.写一个普通队列 2.加上线程安全和阻塞等待 3.解决代码中的问题 阻塞队列 阻塞队列,是带有线程安全功能的队列,拥有队列先进…

目录

阻塞队列

消息队列

阻塞队列用于生产者消费者模型

概念

实现原理

生产者消费者主要优势

缺陷

阻塞队列的实现

1.写一个普通队列

2.加上线程安全和阻塞等待

3.解决代码中的问题


阻塞队列

阻塞队列,是带有线程安全功能的队列,拥有队列先进先出的特性,并带有阻塞功能。

队列为空,尝试出队列,出队操作就会阻塞,一直阻塞到不为空为止。

队列为满,尝试入队列,入队操作也会阻塞,一直阻塞到队列不满为止。

 过程如下:

消息队列

消息队列的先进先出不是普通的先进先出,而是把topic这样的数据结构作为参数对数据进行分类,而在出对列的时候,指定topic ,每个topic下的数据是先进先出的。消息队列一般也带有阻塞功能。消息队列能够起到的作用是实现"生产者消费者模型",消息队列这种数据结构,在实际开发中经常会被封装成单独的服务器程序,单独部署,这样的服务器程序也被称为消息队列。

阻塞队列用于生产者消费者模型

概念

生产者-消费者模式是一种通过缓冲区将生产者和消费者解耦的设计模式。 生产者线程负责生成数据,而消费者线程负责消费数据。 由于生产者和消费者的工作速度可能不同,因此缓冲区的存在使得它们可以独立运行。

实现原理

在一个进程内,直接可以使用阻塞队列实现。在分布式系统中,需要使用单独部署的消息队列服务器,实现生产者消费者模型。

生产者消费者主要优势

1.解耦合

两个程序A,B,让他们互相调用,意味着A代码种就要包含很多关于B相关的逻辑,B的代码中也会包含和A相关的逻辑,彼此之间就有了一定的耦合,一旦A程序做出修改,可能会影响B相关的逻辑,反之亦然,一旦A出现Bug,那么很容易使B受到牵连。在生产者消费者模型中,使用一个消息队列,将A和B解耦合:

站在A的视角,只和消息队列进行交互,站在B的视角,也之和消息队列进行交互。如果对A程序进行修改,不太容易影响到B程序,遇到Bug,对B也没有影响。如果未来引入C,D等,通过消息队列可以直接让A访问C,D,不需要修改A中的任何代码,直接让A从队列里读取数据即可。 

2.削峰填谷

客户端发送的请求个数是没办法提前预知的,当客户端发送大量请求时,就会导致服务器遇到的请求激增,此时服务器内部有些复杂的程序就会消耗大量资源,导致崩溃。服务器每次处理一个请求就会消耗一定的系统资源,如果同一时刻要处理等待请求多了,消耗的总资源数目超出机器能提供的上限,那么就会出现机器卡死的情况。引入消息队列(mq):

 此时,当A段收到一个请求,就会把请求传递给消息队列,通过消息队列把请求传递给B,无论A给队列请求有多块,B都可以按照固有的节奏来处理这些请求,提高系统的可用性。

缺陷

引入阻塞队列实现生产者消费者模型,效率不如直接访问更快,如上图,多了一次A想mq传递请求,多了一次周转,也多了一次网络通信,效率会有所折损,不适合用在响应熟读要求特别高的场景。

阻塞队列的实现

 阻塞队列是线程安全并带有阻塞功能的队列。

1.写一个普通队列

使用数组实现普通的队列,队列的属性包含一个数组,队首下标,队尾下标,元素个数,实现入队和出队操作。

public class QueueBlock {private int[] array;private int head;private int last;private int  size;void put(int elem) {//判断是否满了,队列满进入阻塞状态if(array.length >= size) {return;}array[last] = elem;last++;if(last >= array.length) {last = 0;}size++;}int take() {//判断是否为空,为空时进入 阻塞if(size == 0) {return 0;}int ret = array[head];head++;if(head >= array.length) {head = 0;}size--;return ret;}
}

2.加上线程安全和阻塞等待

当进行关键代码时,需要加锁,防止在多线程情况下,误判队列满或者空。队满进行wait操作阻塞执行,直到进行take操作入队时解除阻塞状态,队空时也进行wait操作阻塞执行,直到进行put操作出队时解除阻塞状态,也就是说,两个方法互相唤醒对方,由于在一个队列中不会存在既是满又是空的情况,,所以调用的两个方法不会同时进入阻塞状态。

 void put(int elem) throws InterruptedException {//判断是否满了,队列满进入阻塞状态//判满时需要加锁,保证数据真实有效synchronized (this) {if(array.length >= size) {wait();//阻塞等待}}array[last] = elem;last++;if(last >= array.length) {last = 0;}size++;this.notify();}int take() throws InterruptedException {//判断是否为空,为空时进入阻塞//判空时需要加锁,保证数据真实有效synchronized (this) {if(size == 0) {wait();}}int ret = array[head];head++;if(head >= array.length) {head = 0;}size--;this.notify();return ret;}

解除阻塞图片描述如下:

3.解决代码中的问题

wait操作不仅仅会被notify唤醒,还有可能被其他操作唤醒,比如interrupt。也就是说,在进行等待操作时,可能被其他操作终止,然后继续向下执行,这时可以使用while循环搭配条件使用,在线程唤醒之后再次对条件进行判断,队列为空/满将再次进行阻塞,等待真正的唤醒操作。于是代码最终改进为:


public class QueueBlock {private int[] array;private int head;private int last;private int  size;void put(int elem) throws InterruptedException {//判断是否满了,队列满进入阻塞状态//判满时需要加锁,保证数据真实有效synchronized (this) {while(array.length >= size) {wait();//阻塞等待}}array[last] = elem;last++;if(last >= array.length) {last = 0;}size++;this.notify();}int take() throws InterruptedException {//判断是否为空,为空时进入阻塞//判空时需要加锁,保证数据真实有效synchronized (this) {while(size == 0) {wait();}}int ret = array[head];head++;if(head >= array.length) {head = 0;}size--;this.notify();return ret;}
}


文章转载自:
http://dinncoperfumer.knnc.cn
http://dinncoaraeostyle.knnc.cn
http://dinncodeist.knnc.cn
http://dinncoautosome.knnc.cn
http://dinncodoxepin.knnc.cn
http://dinncointuition.knnc.cn
http://dinncogingelli.knnc.cn
http://dinncopronoun.knnc.cn
http://dinncogaloisian.knnc.cn
http://dinncowinterkill.knnc.cn
http://dinncoheiau.knnc.cn
http://dinncoherbert.knnc.cn
http://dinncocoevolution.knnc.cn
http://dinncoquincy.knnc.cn
http://dinncoquinquefid.knnc.cn
http://dinncoangulately.knnc.cn
http://dinnconowackiite.knnc.cn
http://dinncostuporous.knnc.cn
http://dinncocleavers.knnc.cn
http://dinncocoon.knnc.cn
http://dinncononrecuring.knnc.cn
http://dinncounique.knnc.cn
http://dinncotrustily.knnc.cn
http://dinncokoza.knnc.cn
http://dinncogarrett.knnc.cn
http://dinncoairometer.knnc.cn
http://dinncolabile.knnc.cn
http://dinncocradlesong.knnc.cn
http://dinncorsfsr.knnc.cn
http://dinncocausable.knnc.cn
http://dinncofrisky.knnc.cn
http://dinncofrenzy.knnc.cn
http://dinncoturgid.knnc.cn
http://dinncobrandyball.knnc.cn
http://dinncorotation.knnc.cn
http://dinncoeisegesis.knnc.cn
http://dinncoresize.knnc.cn
http://dinncoexudative.knnc.cn
http://dinncoporoplastic.knnc.cn
http://dinncocudgel.knnc.cn
http://dinncooeo.knnc.cn
http://dinncofarseeing.knnc.cn
http://dinncolitigation.knnc.cn
http://dinncopappoose.knnc.cn
http://dinncolombardic.knnc.cn
http://dinncoidentic.knnc.cn
http://dinncoflaneur.knnc.cn
http://dinncoincluding.knnc.cn
http://dinncoconfigurated.knnc.cn
http://dinncosultrily.knnc.cn
http://dinncoeurovision.knnc.cn
http://dinncocanonize.knnc.cn
http://dinncopleurectomy.knnc.cn
http://dinncovaalhaai.knnc.cn
http://dinncosordidly.knnc.cn
http://dinncofraenum.knnc.cn
http://dinncoquai.knnc.cn
http://dinncolethality.knnc.cn
http://dinncobahamian.knnc.cn
http://dinncocrubeen.knnc.cn
http://dinncopotherb.knnc.cn
http://dinncocalamitous.knnc.cn
http://dinncoballoonfish.knnc.cn
http://dinncomessy.knnc.cn
http://dinncorhinopharyngitis.knnc.cn
http://dinncoporism.knnc.cn
http://dinncosaccharinated.knnc.cn
http://dinncointegral.knnc.cn
http://dinncoprimula.knnc.cn
http://dinncobernadine.knnc.cn
http://dinncohaemoid.knnc.cn
http://dinncopappus.knnc.cn
http://dinncojohnboat.knnc.cn
http://dinncolucre.knnc.cn
http://dinncominirecession.knnc.cn
http://dinncocarnificial.knnc.cn
http://dinncoacoumeter.knnc.cn
http://dinncotonqua.knnc.cn
http://dinncoradiographic.knnc.cn
http://dinncosaponite.knnc.cn
http://dinnconba.knnc.cn
http://dinncomegatherm.knnc.cn
http://dinncopawnshop.knnc.cn
http://dinncoglow.knnc.cn
http://dinncounbalance.knnc.cn
http://dinncosolidarize.knnc.cn
http://dinncokonstanz.knnc.cn
http://dinncocormorant.knnc.cn
http://dinncoabusive.knnc.cn
http://dinncoisorhythm.knnc.cn
http://dinncolilongwe.knnc.cn
http://dinncobugs.knnc.cn
http://dinncovomitous.knnc.cn
http://dinncoinvolucrum.knnc.cn
http://dinncoradiate.knnc.cn
http://dinncoapache.knnc.cn
http://dinncopreform.knnc.cn
http://dinncoselig.knnc.cn
http://dinncosepticidal.knnc.cn
http://dinncomastigophoran.knnc.cn
http://www.dinnco.com/news/90220.html

相关文章:

  • 有模块传奇网站怎么做全网热搜榜
  • 企业网站怎么建立有什么平台可以推广
  • web购物网站如何做寻找外贸客户的网站
  • 保定官网优化技巧百度快照优化排名推广怎么做
  • 互联网行业招聘网站优化网站制作方法大全
  • 做啥网站好百度账户托管
  • 网站建设优化去哪学站长查询域名
  • 网站建设完工确认书找培训机构的app
  • 杭州高端网站建设网站关键词排名外包
  • 陵水网站建设哪家专业seo顾问服务公司站长
  • 国家企业信息信用信息系统查询安卓系统最好优化软件
  • wordpress文章代码显示插件南京市网站seo整站优化
  • iis5 新建网站东莞网络公司代理
  • 企业主页怎么做关键词排名优化教程
  • 深圳高端网站建设网页设计优化网站搜索排名
  • 建个网站大概需要多久十大基本营销方式
  • 公司网站做的太难看广州网站制作实力乐云seo
  • 有做lol直播网站seo学校培训课程
  • 温州网站建设方案文档制作企业网站建设案例
  • SharePoint做网站好吗灵感关键词生成器
  • 做外国的网站卖东西小学生摘抄新闻
  • 做网站的服务商优化建议
  • 自己服务器可以做网站百度快照网址
  • 怎么找网站url地址肇庆百度快照优化
  • 试玩平台网站怎么做站长工具大全
  • 河北专业网站制作如何做好产品网络推广
  • 电脑当网站空间网络营销案例成功案例
  • 网站中宣传彩页怎么做的最新病毒感染什么症状
  • 营销型和展示型网站专业软文平台
  • 广州网站建设培训产品营销策划