首页 > 其他分享 >并发设计的思考

并发设计的思考

时间:2023-05-16 16:24:32浏览次数:37  
标签:互斥 CAS ReentrantLock 并发 粒度 Volatile 思考 设计

看了AtomicLong的实现或许会立马想到ReentrantLock或者Synchronized也可以实现原子类,只要在操作前获取锁,操作完释放锁。

但是为什么不用这些锁,而是用CAS呢?

显然,这些锁都是互斥锁,在多线程竞争激烈的情况下,伴随着大量线程上下文切换和独占,严重降低吞吐量。

然使用CAS + Volatile,这种乐观锁的机制,能使得线程Spin,并且可以并发读。这将会大幅度提升吞吐。

然而无论是互斥锁还是CAS + Volatile,它们本身都是一种锁机制。在严重竞争的情况下,都会有性能牺牲,比如大量的CAS失败,反复的Spin,消耗CPU资源。

在这种情况下,需要弄清楚竞争的资源是什么,是否可以将竞争点拆分,分摊压力。这种方式本质上是一种锁的粒度控制,将锁的粒度控制的更细,锁的范围更小。这种做法很多地方都有:

  1. ConcurrentHashMap中的实现,将对整个Map的锁,细化到对每个Segment上
  2. 如使用Synchronized或者ReentrantLock,尽量控制锁的范围,避免锁的范围
  3. Mysql的表锁和行锁设计,从MyISAM表锁到InnoDB支持行锁,将锁的粒度控制在行,从而提高存储引擎的并发

通过以上的优秀设计,可以总结出一套锁的优化思路:

互斥锁 -> 乐观锁 -> 锁的粒度控制

在Java中对应的实现方式:

ReentrantLock或者Syschronized -> CAS + Volatile -> 拆分竞争点

标签:互斥,CAS,ReentrantLock,并发,粒度,Volatile,思考,设计
From: https://www.cnblogs.com/r1-12king/p/17405973.html

相关文章

  • 原型设计工具
    现阶段,主流原型设计工具主要有:Sketch、AdobeXD、Pixso、即时设计等。其中Sketch的特点及使用方法如下:1、特点:UI使用体验出色,画布不限大小,每个图层均支持多种填充模式。同时,具有实用的文字渲染与文本样式,以及文件导出工具。2、使用方法:在Sketch之中,左侧窗口会列出文件中的所有图......
  • Go语言并发编程-cnblog
    并发编程并发vs并行举个形象点的例子并发可以理解为一边吃饭,一边喝水,因为人只有一个嘴一个咽喉,所以同一时刻饭和水只能有一样进入,二者只能交替进行并行可以理解为一边走路一边吃东西,因为走路是靠腿脚,吃东西是靠嘴,二者不相干,相当于两个独立的线程,因而可以同时进行Go语言......
  • 火山引擎DataLeap数据调度实例的 DAG 优化方案 (二):功能设计
    针对上面存在的问题以及对需求的分析,我们可以进行如下的功能实现与设计:首先是渲染方案的替换,将svg的渲染方案替换成canvas渲染,通过减少页面中DOM的数量,提高前端渲染性能。其次是不同场景的功能设计,通过上面的需求分析,火山引擎DataLeap研发人员设计了不同的功能模式以满足......
  • 原型设计工具对比及使用体验
    一、原型设计工具对比随着软件市场的不断扩大,用户对于软件的要求也越来越高,除了功能实用之外,软件的美观度、简洁度也成为了评估软件好坏的重要因素。在原型设计中,设计工具的美观、简洁度同样至关重要。目前,市场上有许多常见的原型设计工具,其中一些具备良好的设计界面,如墨刀原型......
  • 主流原型设计工具
     原型设计工具是为了让人们更好地创建和展示应用程序、网站或软件的交互原型,下面我将介绍几种比较常见的原型设计工具。1.AxureAxureRP是美国AxureSoftwareSolution公司旗舰产品,是一个专业的快速产品原型工具,让负责定义需求和规格、设计功能和界面的专家能够快速创建应用软......
  • 设计模式-享元模式
    [url]http://zz563143188.iteye.com/blog/1847029[/url]享元模式(Flyweight)享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。[img]http://dl.iteye.com/upload/attachment/0083/1207/f7aae0dd-b......
  • 设计模式-组合模式
    [url]http://zz563143188.iteye.com/blog/1847029[/url]组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,看看关系图:[img]http://dl.iteye.com/upload/attachment/0083/1205/09cab656-5ff9-380e-9df1-326339ac3509.jpg[/img]直接来看代码......
  • 设计模式-原型模式
    [url]http://zz563143188.iteye.com/blog/1847029[/url]原型模式(Prototype)原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进......
  • 伺服驱动器方案,某成熟量产型号,基于TMS320F28069 设计开发。 ★原理图
    伺服驱动器方案,某成熟量产型号,基于TMS320F28069设计开发。★原理图和PCB源格式(AD打开)-控制板/驱动板/电源板/滤波板★基于TMS320F28069的控制源代码产品资料,代码注释少,需要有一定基础,建议小白不要购买。-控制板/驱动板/电源板/滤波板★基于TMS320F28069的控制源代码产品资料,代码......
  • 一种通用的业务监控触发方案设计 | 京东云技术团队
    一、背景业务监控是指通过技术手段监控业务代码执行的最终结果或者状态是否符合预期,实现业务监控主要分成两步:一、在业务系统中选择节点发送消息触发业务监控;二、系统在接收到mq消息或者定时任务调度时,根据消息中或者任务中的业务数据查询业务执行的结果或状态并与业务预期的结果相......