在jdk1.8中主要做了2方面的改进 改进一:取消segments字段,直接采用transient volatile HashEntry<K,V>[] table保存数据,采用table数组元素作为锁,从而实现了对每一行数据进行加锁,进一步减少并发冲突的概率。 改进二:将原先table数组+单向链表 ...
分类:
其他好文 时间:
2018-03-22 22:37:26
阅读次数:
164
pt-online-schema-change工具依赖于触发器的机制去实现表的无锁DDL。那我们试想在一主一从的情况下,有个大表需要执行DDL操作,为了验证该操作的执行时长,先用pt-online-schema-change工具在从库上执行变更。确认没有问题后再在主库上执行变更。当然,在执行之前是需要开启会话级的sql_log_bin=0以避免记录到binlog。但是我们从官方文档中获知如下:很明
分类:
其他好文 时间:
2018-03-20 00:42:06
阅读次数:
161
如果不用锁机制如何实现共享数据访问。(不要用锁,不要 用sychronized 块或者方法,也不要直接使用 jdk 提供的线程安全的数据结构,需要自己实现一个类来保证多个线程同时读写这个类中的共享数据是线程安全的,怎么 办 ?) 无锁化编程的常用方法 :件 硬件 CPU 同步原语 CAS(Compa ...
分类:
编程语言 时间:
2018-03-19 13:31:14
阅读次数:
283
1 伪命题 这本身是个伪命题。 多线程之间使用队列是一定需要做到同步的。也就是说一定是需要同步手段的,一定要在一个线程读写的时候,阻塞另一个线程。既然不然用锁,那就是用原子变量吧。 2 CAS 3 实现 队列,这里使用链表来实现 然后,考虑push,在push的时候,要在push_start的nex ...
分类:
其他好文 时间:
2018-03-18 01:23:43
阅读次数:
195
无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的! 你发邮件用的Outlook,Foxmail等 你看视频用的优酷,土豆等 你写文档用的Office365,googleDoc,Evernote等 你浏览网页用的IE,Chrome等(B/S是特殊的C/S) …… ...
分类:
其他好文 时间:
2018-03-04 16:01:11
阅读次数:
241
引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝 ...
分类:
其他好文 时间:
2018-03-02 23:55:23
阅读次数:
439
并发无锁队列学习之一【开篇】 1、前言 队列在计算机中非常重要的一种数据结构,尤其在操作系统中。队列典型的特征是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信之间经常采用队列做缓存,缓解数据处理压力。结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现。根据操作队列的场景 ...
分类:
其他好文 时间:
2018-02-25 14:41:03
阅读次数:
388
鉴于昨天的文章<<使用Interlocked在多线程下进行原子操作,无锁无阻塞的实现线程运行状态判断>>里面有一个封装好的无锁的类库可以判断并发下的结束状况,我们可以完成并发时,以及并发的同时做一些事,因此,今天我做了个小demo: 但是发现了一个问题: 这CPU使用率....然后我看了下输出结果: ...
分类:
其他好文 时间:
2018-01-26 23:00:12
阅读次数:
244
在【超高并发】,【写多读少】,【定长value】的【业务缓存】场景下: 1)可以通过水平拆分来降低锁冲突 2)可以通过Map转Array的方式来最小化锁冲突,一条记录一个锁 3)可以把锁去掉,最大化并发,但带来的数据完整性的破坏 4)可以通过签名的方式保证数据的完整性,实现无锁缓存 ...
分类:
其他好文 时间:
2018-01-26 00:24:59
阅读次数:
245
巧妙地使用Interlocked的各个方法,再无锁无阻塞的情况下判断出所有线程的运行完成状态。 昨晚耐着性子看完了clr via c#的第29章<<基元线程同步构造>>,尽管这本书不是第一次看了,但是之前看的都是一带而过,没有深入理解,甚至可以说是不理解,实习了之后发现自己的知识原来这么表面,很多的 ...
分类:
编程语言 时间:
2018-01-25 20:43:08
阅读次数:
195