Jos*_*hua 10 .net c# dictionary
我理解在Dictionary对象的边界错误之外的索引的主要原因之一是线程冲突.(同时读取和写入同一个字典)但是,我遇到了一个令人困惑的案例,其中线程冲突不是一个充分的解释.
情况就是这样:我编写的代码以不安全的方式实现了Dictionary,用于多线程处理.
该代码已作为Web服务实现到两个服务器,服务器A和服务器B.服务器通过负载均衡器访问,负载均衡器将以循环方式向服务器A和B发送请求.
现在这里是棘手的部分.该错误仅出现在服务器A上,而不会出现在服务器B上.根据我们的硬件团队,两个服务器都是相同的.尽管线程冲突本质上是一个随机过程,但它仍然应该同等地影响我的两个服务器.我在一台服务器上看到50多个错误实例,在另一台服务器上看到0.从统计上来说,线程冲突只发生在我的一台服务器上而另一台运行时没有错误.
我已经修改了应用程序以使其更安全,但在Dictionary对象的Insert操作中抛出此错误还有什么其他原因?
虽然线程冲突本质上是一个随机过程
一点也不.它严重依赖于时间.时间可以重复,系统倾向于适应特定的模式.像Microsoft Research的CHESS这样的线程竞争诊断工具通过将随机延迟注入线程的执行来工作.让系统脱离这种模式.喜欢它偶尔会自己做,但每周只有一次左右. 这是随机的,只是不够随意,不能给你一个调试问题的镜头.
因此,看到一个服务器失败而另一个服务器失败并不意味着什么.负载均衡器可能与它有关.你永远无法弄清楚确切的原因,因为你无法找到50次发生的事情.这还不够.
| 归档时间: |
|
| 查看次数: |
5665 次 |
| 最近记录: |