假设我有两个线程(线程1,线程2),其中的螺纹是在同一时间访问高速缓存给定对象,如在下面的代码几乎:缓存访问
Dim expensiveToGetData = Cache("ExpensiveDataKey")
If ExpensiveToGetData is nothing then
'because the cache has expired
ExpensiveToGetData = LoadExpensiveDataFromDataSource()
Cache("ExpensiveDataKey") = ExpensiveToGetData
end If
ProcessExpensiveData(ExpensiveToGetData)
两个线程都不可能加载缓存,因为它们都从没有/过期的缓存请求数据?我在本地机器上运行了一些测试,似乎缓存不止一次被加载。这是一种正常模式?
谢谢你,我以为我疯了! – Achilles 2010-11-16 21:14:20
在立即达到锁定以防止竞争条件之前,请考虑冗余计算缓存值的影响是否与在并行系统中序列化访问共享资源的成本进行权衡时的影响。 也就是说,当您锁定此缓存时,从不同线程(不同页面请求)访问缓存现在将排队缓存资源。在网络环境中,在走下这条路之前,你真的需要认真思考,因为它会影响你可以并行处理的请求的数量。 – 2013-08-28 23:47:02