欢迎光临带式输送机网站,我们是进行标准化生产出售

带式输送机生产厂家_煤矿带式传动装置_标准矿用倾角输送带
带式输送机

提供各行各业全方位的生产设备服务

[dsj80皮带机是可伸缩的马]锁的可伸缩性

作者:八月      发布时间:2021-04-20      浏览量:2
在并发程序中,对可伸缩性的最主要威胁是独

在并发程序中,对可伸缩性的最主要威胁是独占方式的资源锁。影响锁定竞争可能性的两个因素:锁定请求频率和锁定时间。

1.缩小锁的范围(快进快出)

减少竞争可能性的有效方法之一是尽可能缩短锁的持有时间。例如,可以将与锁无关的代码从同步代码块中移动,特别是费用大的操作和可能被堵塞的操作,例如I/O操作。虽然缩小同步码块可以提高可伸缩性,但同步码块也不能太小-一些需要采用原子方式执行的操作必须包含在同步码块中。另外,同步需要一定的费用,将一个同步代码分解为多个同步代码块时,反而会对性能的提高产生负面影响。在拆解同步码块时,理想的平衡点将与平台有关,但在实际情况下,只有将一些大量的计算或阻塞操作从同步码块中移出,才应考虑同步码块的大小。

2.减小锁的粒度

另一种减少锁的持有时间的方法是减少线程请求锁的频率(减少竞争的可能性)。这个可以通过锁具分解和锁具分段等技术来实现,在这些技术中采用多个相互独立的锁具来保护独立的状态变量,从而改变这些变量以前有单个锁具来保护的情况。这些技术可以减少锁操作的粒度,实现更高的伸缩性,但是使用的锁越多,发生死锁的风险也越高。如果锁具有适度而不是激烈的竞争,通过将一把锁分解为两把锁,可以最大限度地提高性能。如果分解了竞争不激烈的锁,在性能和吞吐量等方面的提高会非常有限,但是随着竞争的提高性能下降的拐点值也会提高。在对竞争适中的锁进行拆解的时候,其实就是将这些锁转化为非竞争锁,从而有效的提高性能和伸缩性。

3.锁段

将所分解的技术进一步扩展到一组独立对象的锁上进行分解。例如,在ConcurentHashMap的实现中,使用包括16个锁的数组,每个锁保护所有散列桶的1/16,其中第n个散列桶由第16个锁保护。假设散列函数具有合理的分布性,关键词可以均匀分布,可以将锁的要求减少到原来的1/16左右。锁分段的缺点之一是,与使用单个锁实现垄断访问相比,获得多个锁实现垄断访问更加困难,费用更高。通常,在执行一个操作时,最多只需要获得一个锁,但在某些情况下需要锁定整个容器。例如,ConcurentHashMap需要扩大映射范围,重新计算键值的散列值分布在更大的桶集中时,需要获得分段锁集中的所有锁。