【发布时间】:2020-11-21 20:45:43
【问题描述】:
我正在开发的一个程序有两个线程运行相似但不同的任务:
线程1:
timer1.start()
writeToExternalDB1(consumedData)
timer1.end()
线程2:
timer2.start()
writeToExternalDB2(consumedData)
timer2.end()
我想比较两个外部数据库的写入性能。我在写操作周围有计时器,这样我就可以收集一些指标。这两个线程同时运行。
我的问题是,这种设计是否会针对每次写入操作所花费的时间给出正确的测量结果? 我的理解可能不是因为CPU给每个线程的处理时间可能不同。比如说thread1,在timer1启动后,cpu不会继续进行后面的写操作,而是切换到处理thread2。这可能会在 timer1.start() 和 writeToExternalDB1(consumedData) 之间引入一些差距。但是,在这种情况下,如果我们处理大量数据,我们是否应该认为这个差距可以忽略不计?我应该怎么做才能给出正确的测量结果?
【问题讨论】:
-
为了获得良好的性能测试,确定不要同时运行其他任何东西可能是最安全的。但是,您可能有多个 CPU 内核,因此如果机器上没有运行其他任何东西,您的线程将在独立的 CPU 上运行。
标签: java multithreading performance concurrency locking