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

如何做一份企业网站网站建设过时了吗

如何做一份企业网站,网站建设过时了吗,佛山专业网站设计方案,拓者吧室内设计效果图双向链表 双向链表的特点是它有两个指针,一个指针指向前置节点,一个指针指向后继节点。所以,双向链表可以支持 常量 O(1) 时间复杂度的情况下找到前驱结点,基于这样的特点。双向链表在插入和删除操作的时候,要比单向链…

双向链表

双向链表的特点是它有两个指针,一个指针指向前置节点,一个指针指向后继节点。所以,双向链表可以支持 常量 O(1) 时间复杂度的情况下找到前驱结点,基于这样的特点。双向链表在插入和删除操作的时候,要比单向链表简单、高效。

AQS使用双向链表

因此,从双向链表的特性来看,我认为 AQS 使用双向链表有三个方面的考虑:
第一个方面,没有竞争到锁的线程加入到阻塞队列,并且阻塞等待的前提是,当前线程所在节点的前置节点是正常状态,这样设计是为了避免链表中存在异常线程导致无法唤醒后续线程的问题(如图)所以线程阻塞之前需要判断前置节点的状态,如果没有指针指向前置节点,就需要从 head 节点开始遍历,性能非常低。

第二个方面,在 Lock 接口里面有一个,lockInterruptibly()方法,这个方法表示处于锁阻塞的线程允许被中断。也就是说,没有竞争到锁的线程加入到同步队列等待以后,是允许外部线程通过interrupt()方法触发唤醒并中断的。这个时候,被中断的线程的状态会修改成 CANCELLED。(如图)被标记为 CANCELLED 状态的线程,是不需要去竞争锁的,但是它仍然存在于双向链表里面。意味着在后续的锁竞争中,需要把这个节点从链表里面移除,否则会导致锁阻塞的线程无法被正常唤醒。在这种情况下,如果是单向链表,就需要从 Head 节点开始往下逐个遍历,找到并移除异常状态的节点。同样效率也比较低,还会导致锁唤醒的操作和遍历操作之间的竞争

第三个方面,为了避免线程阻塞和唤醒的开销,所以刚加入到链表的线程,首先会通过自旋的方式尝试去竞争锁。但是实际上按照公平锁的设计,只有头节点的下一个节点才有必要去竞争锁,后续的节点竞争锁的意义不大。否则,就会造成羊群效应,也就是大量的线程在阻塞之前尝试去竞争锁带来比较大的性能开销。所以,(如图)为了避免这个问题,加入到链表中的节点在尝试竞争锁之前,需要判断前置节点是不是头节点,如果不是头节点,就没必要再去触发锁竞争的动作。所以这里会涉及到前置节点的查找,如果是单向链表,那么这个功能的实现会非常复杂。

http://www.yayakq.cn/news/158648/

相关文章:

  • 市网站建设空白word个人简历
  • 昌平网站建设公司做网站需要做需求分析吗
  • 陕西住房和城乡建设部网站首页哪里学网站建设推广
  • 淘宝网站开发类目没法上架商品新手学做网站12天婴
  • 网站建设相关资料文件全球速卖通大学
  • 灌云网站设计专业网站制作哪便宜
  • 免费机械网站模板国内上市的网络公司排名
  • 菠菜源码怎么做网站常德做网站专业公司
  • 乐清网站制作电话网站关键词布局图
  • 微信的网站怎么做哪里有平面设计
  • 台州网站设计建设省级网站建设标准
  • 韩城市住房和城乡建设局网站wordpress如何访问后台页面
  • 华为云速建站模板wordpress大学添加背景音乐
  • 高端网站建设服务器微网站好制作吗
  • asp.net商务网站 包括哪些文件前端开发的软件
  • 网站建设宗旨及商业模式百度电脑版入口
  • 网站初期如何推广的vi设计网站大全
  • seo网站优化工具大全很多卖假药冒产品用二级域名做网站
  • 花钱想贷款结果成了做网站东莞网络营销代运营
  • 西安空调销售网站建设自己做网站能做付费链接吗
  • 上海微网站设计全国大学生创业网登录入口
  • 淮海中路街道网站建设北京高端网站开发公司
  • 成品网站建设哪家好九九9九九9视频在线观看
  • 企业cms免费模板上海做网站优化
  • 网站制作的基本步骤是增加网站关键词
  • 石家庄模板自助建站seo排名工具外包
  • 中山市住房和城乡建设局网站苗木网站素材
  • 无线网站应建设在什么地方wordpress 购物 手机站
  • 做app要不要建网站成功做网站
  • 网站制作协议windows server 2008 wordpress