【发布时间】:2010-01-27 12:24:09
【问题描述】:
我正在完成对一个似乎工作正常的多线程应用程序的测试,直到我将其置于重负载下,然后对运行它的机器施加压力。然后我开始看到一些我没有预见到的奇怪的边缘情况会产生一些意外/不可预见的情况。我强调机器的方式是在一个非常大的 sqlite 数据库上运行真空。有没有人有任何其他好的方法来引发这种类型的重载场景?
【问题讨论】:
标签: c# multithreading
我正在完成对一个似乎工作正常的多线程应用程序的测试,直到我将其置于重负载下,然后对运行它的机器施加压力。然后我开始看到一些我没有预见到的奇怪的边缘情况会产生一些意外/不可预见的情况。我强调机器的方式是在一个非常大的 sqlite 数据库上运行真空。有没有人有任何其他好的方法来引发这种类型的重载场景?
【问题讨论】:
标签: c# multithreading
你可以使用CHESS。
【讨论】:
您指的是哪种压力?内存、CPU、全线程池还是文件 I/O?
我会编写一个简单的应用程序,它有一个消耗内存的线程、一个消耗 CPU 周期的线程、一个占用线程池的线程,以及一个破坏磁盘的线程。在其上挂一个 UI 以控制每个线程的胃口,并调整“旋钮”以与您的应用程序按喇叭。
【讨论】:
【讨论】:
由于不正确的锁定导致的线程问题往往会在重负载下暴露出来,因为时间会发生变化。实际上,产生问题的不是繁重的负载,而是由于随机调度延迟而导致的时间变化。您可以通过在线程执行中引入随机延迟来重现问题而无需繁重的负载。这就是国际象棋使用的方法。
【讨论】: