如何提高并发度?读写锁,分拆锁、分离锁,ThreadLocal,copyOnWrite,工作队列 per thread, 工作窃取
来源:互联网 发布:淘宝优惠券那个网站好 编辑:程序博客网 时间:2024/06/08 08:18
读写锁
读写锁并没有分拆锁定粒度,而是区分操作的性质,读与读可以并发,读-写,写-写互斥,只有写是独占锁。
分拆锁和分离锁的思想都是对于复杂数据机构,不同的部分对应不同的锁,降低锁的粒度
分拆锁,splitingLock
独立不相关的数据用不同的锁,比如一个对象有很多字段,这些字段是独立的,而不是组合起来表示一个逻辑数据(比如firstName, lastName,必须组合起来表示一个名字),那么可以每个字段各自对应不同的锁,而不是锁整个对象
分离锁stripingLock
分离锁是分拆锁定generalization,把一个集合看分成若干partition, 每个partiton一把锁。ConcurrentHashMap就是分了16个区域,这16个区域之间是可以并发的,
ThreadLocal模式,thread confine
如果本身就是per thread自己的数据,不要放到公共的map,而是放到thread local里,不需要竞争就不用竞争
copyOnWriteArray 不可变对象:
主要解决读、遍历和写之间的冲突,对数组写(更新、增加)的时候,copy一个新数组做,这样iterator永远不会有ConcurrentModification问题,读也永远都是读得完结状态下的值,
工作队列per thread(多工作队列线程池)
经典的executor是线程池的线程共享一个工作队列,争用很厉害。可以每个线程一个工作队列。用work stealing解决 不均匀的问题,即工作队列用双端队列,当一个worker发现自己的队列没有task,去别的队列取,但是是从另一端取,这样也是为了减少竞争。
- 如何提高并发度?读写锁,分拆锁、分离锁,ThreadLocal,copyOnWrite,工作队列 per thread, 工作窃取
- 阻塞队列 生产者-消费者模式 窃取工作模式(java并发编程实践读书笔记二)
- 如何提高工作满意度
- 工作窃取算法
- 如何提高自己的工作舒适度
- 如何提高工作学习效率
- 如何提高电路工作频率
- 如何提高电路工作频率
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MySQL-Proxy实现MySQL读写分离提高并发负载
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- 用golang编写一个并发工作队列
- ThreadLocal工作原理
- ThreadLocal工作原理
- ThreadLocal工作原理
- ThreadLocal工作原理
- ffmpeg filter参数设置格式
- 算法导论-最大子数组问题-线性时间复杂度算法分析与实现
- Adaboost 算法的原理与推导
- 排列(c++ stl+哈希)
- Android 四大组件学习之Service五
- 如何提高并发度?读写锁,分拆锁、分离锁,ThreadLocal,copyOnWrite,工作队列 per thread, 工作窃取
- UVA 12563 Jin Ge Jin Que Hao
- 关于程序运行 IROM、IRAM解决方案
- 只使用处理IO的printDigit函数,编写一个过程以输出任意实数
- Spring框架下的管理员登录功能实现
- POJ 1850 Code(组合数学)
- android下需要怎么样配置或者操作才能在界面里显示状态栏(status bar)
- SAP错误处理总结
- Invert Binary Tree