通过Thread.sleep()模拟静态Web请求

时间:2015-11-15 02:07:51

标签: java multithreading jmeter scheduling load-testing

我正在模拟在Web服务器上执行的Web请求.Web服务器是通过一个简单的线程池对象来模拟的,该对象接受来自队列的请求 由工人经营。由于Web请求可能是静态的(I / O绑定)或动态的(CPU绑定)所以我将Web请求模拟为CpuBoundJob和IoBoundJob,它们是Runnable对象,如下面的代码所示.sleep方法中的睡眠时间指定静态的时间量网页需要从磁盘读取并发送到Web客户端。在IoBoundJob的情况下,问题是Thread.sleep(),这不精确,并且IoBoundJob在不同的运行中可以有不同的响应时间。这是相同的静态请求可能由不同的Web客户端采用不同的响应时间(对于静态请求,响应时间不是100%准确)。毫无疑问 Thread.sleep()不精确,可以睡眠超过指定但我认为这是Thread.sleep()的美丽,当它用于模拟任何IO绑定作业(静态Web请求)时,因为在IoBound作业的情况下, Io完成它没有必要立即抓住处理器并完成其运行,而是当其I / O完成时,可能需要一点时间等待处理器忙于其他工作。

我的看法是否正确?如果它不对,那么在我的仿真项目场景中Thread.sleep()的精确替代是什么?我无法使用spin交换Thread.sleep(),因为我在以下代码中使用了CPU绑定作业的旋转。

public class CpuBoundJob  Runnable {
    long delay;
         public CpuBoundJob(long delay) {
            this.dlay=delay;
              }
        @Override
        public void run() {

             long timeToWait = this.delay;
             long startTime = System.currentTimeMillis();
             while(startTime + timeToWait > System.currentTimeMillis());
    }
    }
 public class IoBoundJob  implements Runnable {
    long delay;
 public IoBoundJob(long delay) {
    this.dlay=delay;
  }
  @Override
public void run() {

    try{

Thread.currentThread().sleep(this.delay);

        }catch(InterruptedException e){ }
   }
}

0 个答案:

没有答案