由于并发线程,缓存变得无限大
Cache growing infinitely large because of concurrent threads
我有一个缓存对象,旨在保存跨模块共享的变量。
并发线程正在使用缓存处理程序访问和写入该缓存对象,该缓存处理程序使用变量锁定来保持缓存完整性。
缓存将所有变量保存在一个唯一的会话 ID 下。创建新会话 ID 时,它必须引用旧会话 ID,将一些变量复制到新会话中。
一些会话 ID 也会同时 运行。
我需要在所有并发线程完成对缓存的引用后立即清除缓存,并且所有新会话都已将变量从缓存复制到它们的会话中。
问题...
我不知道什么时候清除缓存是安全的。
我有数百个线程进行 API 可变时间调用。新会话将产生新线程。我不能只查看活动线程来确定何时清除缓存。
我的缓存将增长到无限大并最终导致程序崩溃。
我相信这一定是一个普遍的问题。那些比我聪明得多的人都通过了。
关于如何最好地解决这个问题有什么想法吗?
你可以通过锁定来解决这个问题...创建一个 Cleaner 线程,它有时会锁定缓存(获取你拥有的所有锁)并清除它,然后释放锁...
(如果你对缓存的不同部分有很多锁,你也可以逐个锁定和清除缓存...)
我有一个缓存对象,旨在保存跨模块共享的变量。
并发线程正在使用缓存处理程序访问和写入该缓存对象,该缓存处理程序使用变量锁定来保持缓存完整性。
缓存将所有变量保存在一个唯一的会话 ID 下。创建新会话 ID 时,它必须引用旧会话 ID,将一些变量复制到新会话中。
一些会话 ID 也会同时 运行。
我需要在所有并发线程完成对缓存的引用后立即清除缓存,并且所有新会话都已将变量从缓存复制到它们的会话中。
问题...
我不知道什么时候清除缓存是安全的。
我有数百个线程进行 API 可变时间调用。新会话将产生新线程。我不能只查看活动线程来确定何时清除缓存。
我的缓存将增长到无限大并最终导致程序崩溃。
我相信这一定是一个普遍的问题。那些比我聪明得多的人都通过了。
关于如何最好地解决这个问题有什么想法吗?
你可以通过锁定来解决这个问题...创建一个 Cleaner 线程,它有时会锁定缓存(获取你拥有的所有锁)并清除它,然后释放锁...
(如果你对缓存的不同部分有很多锁,你也可以逐个锁定和清除缓存...)