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

油漆工找活做的网站北京网站建设哪家专业

油漆工找活做的网站,北京网站建设哪家专业,seo优化网站建设公司,展厅设计公司选四度科技在前面的文章中,有提到Redis的命令执行线程是单线程的,而这个主要体现在EventLoop的循环是在主线程中执行的,而我们也知道在 Redis list中可以使用 BLPOP 可以进行阻塞式的获取列表的数据,也就是当获取的列表是空的,客…

在前面的文章中,有提到Redis的命令执行线程是单线程的,而这个主要体现在EventLoop的循环是在主线程中执行的,而我们也知道在 Redis list中可以使用 BLPOP 可以进行阻塞式的获取列表的数据,也就是当获取的列表是空的,客户端会阻塞等待,直到对应的list有数据,或是达到了超时时间,如下图

BLPOP的使用方式: BLPOP list1 list2 ... listn timeout

那如果redis是单线程的,为什么当一个客户调用BLPOP时,不会影响其他的客户端访问呢?

接下来我们看下,BLPOP的源码是如何处理的?

从前面的文章中,知道 BLPOP的命令是从 redisCommandTable中获取的

以上的代码逻辑是当处理的key数组中,只要有一个key对应的列表有值(如 list1 list2 list3,list1 没有列表,list2 与list3 有值,则只会返回 list2对应的值),则会直接返回对应的数据,如果对应的key不是list类型,则会返回异常,这里的逻辑比较好理解,再来看下当没有数据时的处理逻辑,会继续往下调用 blockForKeys.

从上面可以看出,当有客户端进来,相应的key数组对应的列表都为空时,redis服务器会将客户端信息加入到block_lists列表中,如果有设置timeout,也会将客户端加入到超时列表中,如果是有多个客户端同时block时,会按先阻塞先服务的原则进行服务。

那block_lists的数据又是什么时候被发现的呢?

还记得在blockClient的函数中,会设置server.blocked_clients 这个字段,这里会记录当前有多少个客户发起了阻塞的请求,因为Redis是单线程,使用IO多路复用的方式来进行监听,从redis的启动分析篇知道,接收命令的处理器是 readQueryFromClient 函数,执行命令最终会调用到 processCommand, 这里有一个逻辑是在处理完命令,会调用handleClientsBlockedOnKeys,

在 server 中有两个字段,一个是 blocked_clients,一个是ready_keys,当调用push方法添加数据时,会判断对应的key是否有blocked_clients,如果有会将对应的key移至 ready_keys列表中

接着就会调用 handleClientsBlockedOnKeys 进行处理向阻塞的客户端回写数据的过程了。

所以这里其实对于客户端在发起 BLPOP命令时,如果没有数据,是直接返回的,来看下客户端调用的情况,以jedis为例

其实客户端是发了两个请求,一个是发送blpop的请求,再发一了一个获取结果的请求,调用第二个时,如果对应的key为空或是不存在,则会加入阻塞队列,下面的请求就会等待结果,而这里会设置client.setTimeoutInfinite 来配置socket的超时时间为无限,就会一直等下去。

至此,也就清楚当发起BLPOP时,即使是单线程的redis服务端,为什么不会影响其他的客户请求了。

这里留一个问题:如果这个客户端一直阻塞,会带来什么问题,需要怎么处理呢?


文章转载自:

http://JAug4fkS.xmdbq.cn
http://JPBrEg3T.xmdbq.cn
http://4yIdGx3w.xmdbq.cn
http://dLL1fXxm.xmdbq.cn
http://sxYW3F8V.xmdbq.cn
http://M4Y2pWlh.xmdbq.cn
http://eWvCFrpX.xmdbq.cn
http://79cHUWDV.xmdbq.cn
http://fx0Doaae.xmdbq.cn
http://TorSwmvH.xmdbq.cn
http://wXuqlIDh.xmdbq.cn
http://wxEEkvU2.xmdbq.cn
http://WtCekW6K.xmdbq.cn
http://6AciMkUB.xmdbq.cn
http://y578M8Pa.xmdbq.cn
http://TqRjtkuw.xmdbq.cn
http://NXAyeb17.xmdbq.cn
http://tGjqiXnO.xmdbq.cn
http://GqMneUE1.xmdbq.cn
http://B49kdHN0.xmdbq.cn
http://T4MarWCY.xmdbq.cn
http://gEImhIT9.xmdbq.cn
http://2kX9OOxp.xmdbq.cn
http://b1xxiyrK.xmdbq.cn
http://ruW8jVgR.xmdbq.cn
http://EGQ06NiE.xmdbq.cn
http://4PEfmTNF.xmdbq.cn
http://edRWCzVe.xmdbq.cn
http://RLBUcN1u.xmdbq.cn
http://mVfxKzfE.xmdbq.cn
http://www.dtcms.com/wzjs/653200.html

相关文章:

  • 国外优秀网站欣赏对网站建设的维护
  • 网站建设与管理实验目的建设通网站vip
  • 做网站还是移动开发网络建设需求
  • 科普网站建设的支持力度河南天元建设公司网站
  • 谷歌外贸建站多少钱整站seo排名外包
  • 服装网站建设目标有没有关于网站开发的名人访谈
  • 西安做网站公司必达网站开发外包哪家好
  • 网站开发人才可以自学做网站吗
  • 网站栏目内链怎么做水果电商网站开发方案
  • 物流运输网seo研究中心培训机构
  • 上杭县铁路建设办公室网站做手机旅游网站
  • 飞翔时代网站建设wordpress文件上传失败
  • 写作参考范文网站wordpress 前端构建
  • 网站备案号被收回价格低的英文怎么说
  • 小说网站个人可以做吗顾家家居网站是哪个公司做的
  • 用asp制作一个简单的网站wordpress4.9.5漏洞
  • 做 在线观看免费网站移动互联网开发的学习心得300字
  • 互联网网站样式用dw设计网站怎么做
  • 运动网站模板北京市建设资格执业中心网站
  • 罗湖网站建设价格wordpress源代码如何在本地编辑器
  • 建站工具上市网站开发 手机 电脑
  • 制作网页网站教程章丘做网站优化
  • 辽宁省建设银行网站服装品牌策划方案
  • 做网站的实践报告煤棚网架加工厂
  • 网站开发与维护竞赛竞价恶意点击报案
  • 三个律师做网站合适吗朝阳网络公司怎么样
  • 江西宗杰建设工程有限公司网站东莞南城网站设计
  • 太仓住房与城乡建设部网站WordPress显示加载时间
  • wordpress更新慢合川网站优化
  • iis新建网站无法浏览任意的关键词或网站做引流