java—在两个线程中测量时间持续时间会给出正确的结果吗?

btxsgosb  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(312)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

上个月关门了。
改进这个问题
我正在开发的程序有两个线程运行类似但不同的任务:
螺纹1:

timer1.start()
writeToExternalDB1(consumedData)
timer1.end()

螺纹2:

timer2.start()
writeToExternalDB2(consumedData)
timer2.end()

我想比较两个外部数据库的写入性能。我在写操作周围有计时器,以便收集一些指标。这两个线程同时运行。
我的问题是,这种设计是否能给出正确的测量结果,即每个写操作所花费的时间?我的理解可能不是因为cpu给每个线程的处理时间可能不同。假设对于thread1,在timer1启动之后,cpu不会前进到后面的写操作,而是切换到处理thread2。这可能会在timer1.start()和writetoexternaldb1(consumeddata)之间引入一些间隙。然而,在这种情况下,如果我们处理大量数据,我们是否应该将这个差距视为可以忽略不计的呢?我应该怎么做才能得到正确的测量结果?

tf7tbtn2

tf7tbtn21#

你问:
这两个线程的持续时间测量会给出正确的结果吗?
是的,如果您的 timer 正确编码,例如呼叫 Instant.now() .
你问:
我想比较两个外部数据库的写入性能…这两个线程同时运行。
你的比较不可能精确,甚至不可能有效。
如果你的应用程序运行在一台只有一个内核的机器上,那么当一个线程运行时,另一个线程正在休眠。
在多核机器上,两个线程可能同时运行。或者它们可能不是,您无法控制主机操作系统对进程的调度。主机操作系统可能随时暂停jvm。
如果您的机器有多个内核,这些内核在测试运行时很可能未被使用,那么您可能会假设您的测试结果在valid的大致范围内,但是您无法确定,并且您肯定不能称它们为准确的。

相关问题