锁专题(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
锁专题(9) CyclicBarrier 栅栏源码深度解析
栅栏(Barrier)
简介
栅栏(Barrier)类似于闭锁,它能阻塞一组线程直到某个事件发生。
闭锁是一次性对象,一旦进入最终状态,就不能被重置了。
栅栏与闭锁的关键区别在于,所有线程必须同时达到栅栏位置,才能继续执行。
闭锁用于等待事件,而栅栏用于等待其他线程。
而我再等你点赞。
java 手写并发框架(一)异步查询转同步的7种实现方式 我就用到了 CyclicBarri...
2020-10-17 08:15:55 |
Lock