【发布时间】:2015-09-26 02:55:20
【问题描述】:
我正在阅读有关 ReadWriteLock 的文档
读写锁是否会提高使用性能 互斥锁取决于数据的频率 读取与被修改相比,读取和写入的持续时间 操作,以及对数据的争用——即, 将尝试同时读取或写入数据的线程。
“互斥锁”是什么意思?这是否意味着我们一次只能执行一项操作(读取或写入)?例如,只是一个同步块。
【问题讨论】:
标签: java multithreading
我正在阅读有关 ReadWriteLock 的文档
读写锁是否会提高使用性能 互斥锁取决于数据的频率 读取与被修改相比,读取和写入的持续时间 操作,以及对数据的争用——即, 将尝试同时读取或写入数据的线程。
“互斥锁”是什么意思?这是否意味着我们一次只能执行一项操作(读取或写入)?例如,只是一个同步块。
【问题讨论】:
标签: java multithreading
互斥锁将确保一次只能执行一个操作(一个读取器或一个写入器)。
根据ReadWriteLock的javadoc:
只要没有写者,读锁可能被多个读线程同时持有。写锁是独占的。
在实践中,这意味着如果您有大量写入者,那么读取器就很难获得访问权限,因为单个写入器会锁定所有读取器。或者,如果您有许多读取器执行短读取,那么 ReadWriteLock 的开销将比简单的互斥锁执行得更差,因为 ReadWriteLock 的开销要大得多。
我已经解释了 javadoc 的这一部分:
例如,最初填充了数据并随后不经常修改但经常被搜索(例如某种目录)的集合是使用读写锁的理想候选者。但是,如果更新变得频繁,则数据大部分时间都被排他锁定,并发性几乎没有增加。此外,如果读取操作太短,则读写锁实现的开销(本质上比互斥锁更复杂)会主导执行成本,特别是许多读写锁实现仍然通过一小段代码序列化所有线程
【讨论】: