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