锁专题(10)Linux SeqLocks 原子信号量说明
3. 原子信号量说明
Itanium 处理器提供了许多称为“信号量指令”的原子读取修改写入操作。
信号量指令之所以昂贵,是因为它们获取了专有的高速缓存行,然后以原子方式对高速缓存行执行了读取修改写入周期。
处理器无法以与其他Itanium指令相同的方式优化内存访问。
信号量指令始终是非推测性(non-speculative)的。
这意味着原子信号指令会导致管道停顿。
所有信号量操...
2020-10-17 08:15:55 |
Lock
锁专题(10)Linux SeqLocks
Effective Synchronization on Linux/NUMA Systems
要在基于Itanium的大型NUMA系统上获得令人满意的性能,必须进行有效的锁定。
当前,在Linux内核中,NUMA计算机上并行执行流的同步是通过多种机制实现的,这些机制包括原子操作,锁定和内存访问排序。
各种同步方法也可以组合以提高性能。
演讲提出了Linux onItanium上基本...
2020-10-17 08:15:55 |
Lock
锁专题(9) SynchronousQueue 同步队列源码解析
SynchronousQueue
是什么
SynchronousQueue 是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。
简而言之:线程安全,阻塞。
入门案例
我们定义两个线程,一个负责写入,一个负责读取。
import java.util.concurrent.SynchronousQueue;
import java.util.concurre...
2020-10-17 08:15:55 |
Lock
锁专题(9) Semaphore 信号量源码深度解析
情景导入
我想各位小伙伴一定都做过导出功能,就算没做过,那肯定也用过。
如果你既没有吃过猪肉,也没有见过猪跑。那这篇文章也可以读一读,可以补充点知识。
导出作为一个非常常见的功能,也是稍有不慎就会导致系统压力剧增的问题之一。
有类似苦恼的小伙伴可以阅读下我以前写的文章:
java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) excel 工...
2020-10-17 08:15:55 |
Lock
锁专题(9) PriorityBlockingQueue 优先级阻塞队列源码解析
PriorityBlockingQueue
简介
一个无界BlockingQueue,它使用与类PriorityQueue相同的排序规则,并提供阻塞检索操作。
尽管此队列在逻辑上是不受限制的,但是尝试添加可能由于资源耗尽 OutOfMemoryError而失败。
限制如下:
(1)此类不允许使用null元素。
(2)依赖于Comparable的优先级队列也不允许插入不可比较的...
2020-10-17 08:15:55 |
Lock
锁专题(9) LinkedTransferQueue 源码解析
LinkedTransferQueue
是什么
基于链接节点的无限制 TransferQueue。
此队列针对任何给定的生产者对元素FIFO(先进先出)进行排序。
队列的开头是某个生产者在队列中停留时间最长的元素。
队列的尾部是某个生产者最短时间进入队列的元素。
LinkedTransferQueue 是 LinkedBlockingQueue、SynchronousQueu...
2020-10-17 08:15:55 |
Lock
锁专题(9) LinkedBlockingQueue 使用入门及源码解析
问题
LinkedBlockingQueue 是什么?
优缺点?
应用场景?
源码实现?
个人启发?
LinkedBlockingQueue
双向并发阻塞队列。
所谓双向是指可以从队列的头和尾同时操作,并发只是线程安全的实现,阻塞允许在入队出队不满足条件时挂起线程,这里说的队列...
2020-10-17 08:15:55 |
Lock
锁专题(9) DelayQueue 延迟队列源码解析
DelayQueue
简介
延迟元素的无限制BlockingQueu,其中元素只能在其延迟到期后才能获取。
当元素的getDelay(TimeUnit.NANOSECONDS)方法返回小于或等于零的值时,就会发生过期。
即使未到期的元素无法使用take或poll删除,它们也被视为普通元素。
此队列不允许 null 元素。
思考题
为什么不允许有 null 元素?
其实和其他几...
2020-10-17 08:15:55 |
Lock