我正在阅读关于ReadWriteLock的文档
读写锁是否会比使用互斥锁提高性能取决于与被修改相比数据被读取的频率、读和写操作的持续时间以及对数据的争用--即尝试同时读取或写入数据的线程数。
“互斥锁”是什么意思?这是否意味着我们一次只能执行一次操作(读或写)?例如,只是一个同步块。
发布于 2015-07-08 09:43:46
互斥锁将确保一次只能执行一个操作(一个读取器或一个写入器)。
根据ReadWriteLock的javadoc
读取锁可以由多个读取器线程同时持有,只要没有写入器。写锁是唯一的。
在实践中,这意味着如果您有大量的作者,那么读者将很难获得访问,因为一个作者将锁定所有的读者。或者,如果有许多读取器执行短读,那么ReadWriteLock的开销将比简单的互斥锁更糟糕,因为ReadWriteLock的开销要大得多。
我已经转述了javadoc的这一节:
例如,一个集合最初填充了数据,之后很少被修改,同时经常被搜索(例如某种目录),是使用读写锁的理想选择。但是,如果更新变得频繁,那么数据大部分时间都是独占锁定的,并发性几乎没有增加。此外,如果读操作太短,读-写锁实现的开销(本质上比互斥锁复杂)可以控制执行成本,特别是因为许多读-写锁实现仍然通过一小部分代码序列化所有线程。
https://stackoverflow.com/questions/31288571
复制相似问题