【发布时间】:2019-12-31 23:03:58
【问题描述】:
我有一个“订单管理器”应用程序,我遵循“单一编写者”方法来处理订单事件以避免任何竞争条件。
所以我有一个主线程,它忙于为传入的订单事件旋转并处理事件而不进行任何阻塞调用。
这个主线程还需要静态数据来验证订单事件等。所以我将静态数据存储在内存缓存(java 映射)中。
我想了解通过我的主线程访问内存中静态数据的最高效方式。
A) 主线程本身是否应该负责维护内存中的静态数据,以便所有事情都只有一个线程,从而实现最大 CPU 吞吐量,避免任何与线程相关的争用/锁定。
或者
B) 我是否应该使用单独的专用线程将静态数据存储在 ConcurrentHashmap 中,并与我的主线程(单个写入器,不同的读取器线程)共享此映射。我在某处读到,只要有一个写入线程,读取线程的访问就会使用特殊通道跨 CPU 内核进行优化。但同样,使用第二种方法,我仍然必须使用 ConcurrentHashMap,它会带来与线程和锁相关的延迟。
我想听听关于什么是实现最大吞吐量的最佳方法的看法。
【问题讨论】:
-
你检查过
ReadWriteLock吗?最大吞吐量是在没有同步的情况下实现的,但代价是潜在的过时数据。然后就是什么时候被哪个线程访问了……
标签: java multithreading performance