【问题标题】:How to best simulate IO bound work?如何最好地模拟 IO 绑定工作?
【发布时间】:2014-08-19 00:30:30
【问题描述】:

很容易模拟繁重的 CPU 负载。

public void ExerciseCPU()
{
  for (int i = 0; i < 999; i++)
    for (int j= 0; j < 999; j++)
      for (int k = 0; k < 999; k++)
        int x = i * j * k;    
}

模拟繁重或慢速 IO 的类似短代码块是什么?换句话说,有什么技术可以模拟 CPU 上的缓慢进程?

【问题讨论】:

  • 当你问这样一个关于“IO”的问题时,就像在问“我可以去孟菲斯吗?”换句话说,我们需要更多地了解你要去哪里,从哪里来。 IO 定义了整个 Phylum。有磁盘I/O、串行I/O、同步和异步I/O、USB I/O等等等等。
  • @L.B 创建 8 个无限循环线程 :)
  • @HamletHakobyan 谢谢,但我知道。我只是想表明即使这样也可能有点棘手。
  • thanks but I know @L.B 我是这么认为的。这只是个玩笑:)
  • @Servy “只需要在不消耗 CPU 的设定时间内模拟操作完成吗?”正是而且只有这个。

标签: c# performance testing io


【解决方案1】:

假设您想在模拟/拦截的 IO 层中测试您的应用在 IO 期间的长时间延迟:

对于async/awaitTask.DelayThread.Sleep 将非常适合同步 IO 操作模拟非 CPU 负载。

class SlowFakeDataFromDeviceProvider : IDataFromDevice    
{
  Data GetFromDevice(...)
  {
    Thread.Sleep(1000);
    return ConstructFakeData();
  }
  ...

请注意,如果您确实需要大量 IO 负载 - 请考虑对大文件进行无缓冲读取(以避免缓存内存压力)。

【讨论】:

  • 模拟高网络IO和高文件IO会有什么区别。纯粹基于硬件特性。也许以太网比硬盘更好地处理多次读写?我正在尝试在多线程环境中模拟网络 IO。
  • @Zapnologica 我不知道。衡量每个特定情况通常是个好主意。
猜你喜欢
  • 2014-07-26
  • 2010-10-30
  • 2021-07-18
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多