java - 两个线程中的持续时间测量会给出正确的结果吗?
问题描述
我正在开发的程序有两个线程运行类似但不同的任务:
线程1:
timer1.start()
writeToExternalDB1(consumedData)
timer1.end()
线程2:
timer2.start()
writeToExternalDB2(consumedData)
timer2.end()
我想比较两个外部数据库的写入性能。我在写操作周围有计时器,这样我就可以收集一些指标。这两个线程同时运行。
我的问题是,这种设计是否会针对每次写入操作所花费的时间给出正确的测量结果?我的理解可能不是因为CPU给每个线程的处理时间可能不同。假设对于thread1,在timer1启动后,cpu不会继续进行后面的写操作,而是切换到处理thread2。这可能会在timer1.start()和writeToExternalDB1(consumedData)之间引入一些差距。但是,在这种情况下,如果我们正在处理大量数据,我们是否应该认为这个差距可以忽略不计?我应该怎么做才能给出正确的测量结果?
解决方案
您问:
两个线程中的持续时间测量会给出正确的结果吗?
是的,如果您timer
的编码正确,您将准确捕捉开始和停止的时刻,例如调用Instant.now()
.
您问:
我想比较两个外部数据库的写入性能。… 这两个线程同时运行。
您的比较不太可能是精确的,甚至是有效的。
如果您的应用程序在具有单核的机器上运行,那么当一个线程运行时,另一个线程正在休眠。
在多核机器上,您的两个线程可能同时运行。或者它们可能不是,您无法控制主机操作系统的进程调度。您的JVM可能随时被主机操作系统暂停。
如果您的机器有多个内核在您的测试运行时可能未使用,那么您可能会认为您的测试结果在有效范围内的某个地方,但您不确定,而且您当然不能称它们为准确。
推荐阅读
- batch-file - 如何删除notwork文件夹中的所有内容
- python - python为什么不调用就执行导入的脚本
- angular - 如何从角度4中根文件夹外的文件夹加载角度图像?
- javascript - 如何使用 react-camera 将 jpg 图像发送到服务器?
- excel - 从 Excel 在线电子表格中提取数据以在网页上使用
- javascript - 错误:Observable_1.Observable.defer 不是 Angular2 的函数
- cmake - cmake第三方项目步骤
- network-programming - rdma 意外 CM 事件 3 - RDMA_CM_EVENT_ROUTE_ERROR
- javascript - Amcharts 类别轴也显示空数据的日期
- javascript - 如何在数据表中添加行?