BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #29663同步于 2014/4/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[问题]多线程,如何尽可能准确的测出线程中某个方法的运行时间

peakmuma
2014/4/29镜像同步11 回复
初始问题:如何在多线程的环境下,尽可能准确的测出某个方法的运行时间 线程中的run方法如下: public void run(){ //--------其他代码---------- for(i=0;i<n;i++) mymethod(); //--------其他代码---------- } 现在有多个线程,如何准确的测出每个线程每次执行mymethod()方法所需的时间。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2014/4/29
不可能。除非你在操作系统级别这样做。
peakmuma机器人#2 · 2014/4/29
好吧,其实这不是最初始的问题 明天我把问题详细写一下,手机不方便写 【 在 nuanyangyang 的大作中提到: 】 : 不可能。除非你在操作系统级别这样做。
byrcjh机器人#3 · 2014/4/30
这问题太高大上了,我只能占楼学习了
peakmuma机器人#4 · 2014/4/30
同学习中 【 在 byrcjh 的大作中提到: 】 : 这问题太高大上了,我只能占楼学习了
taoch机器人#5 · 2014/4/30
我感觉加锁应该就可以吧?这三句执行前用一个ReentrantLock 给 lock起来,然后执行完毕后unlock 【 在 peakmuma (【意涵团】残忍的慈悲) 的大作中提到: 】 : 初始问题:如何在多线程的环境下,尽可能准确的测出某个方法的运行时间 : 线程中的run方法如下: : [code=java] : ...................
peakmuma机器人#6 · 2014/4/30
加锁貌似是不起作用的,因为无法保证cpu不被切换走。 如果执行了第一行得到before的值,cpu被切换到执行其他线程,在回到这个线程,after-before的值不是mymethod()方法所消耗的时间。 【 在 taoch 的大作中提到: 】 : 我感觉加锁应该就可以吧?这三句执行前用一个ReentrantLock 给 lock起来,然后执行完毕后unlock
nuanyangyang机器人#7 · 2014/5/1
这不就是benchmark问题嘛。最好的还是在一个基本空闲的机器上反复执行这个函数,然后计算时间平均数。尽可能取最后几次,一开始预热可能需要一些时间。 不过,有一些陷阱: 1. Intel的CPU很聪明。如果CPU温度不是很高,它会工作在1.5倍标称频率下(如你的CPU是1.8MHz,它平时会工作在2.7MHz),一旦太热了,就会开启风扇,并调低频率。这样程序执行的速度会有影响。 2. Java虚拟机会对热函数、热循环进行JIT Compiling。所以,执行的次数会影响JVM做出的决定。 3. Eclipse本身有Profiling功能,可以试试。但是,它本身会让程序速度慢10倍以上,而且不能避免上述两个问题的影响。
step4机器人#8 · 2014/5/1
设置线程的优先级可行吗?
shan10211865机器人#9 · 2014/5/1
我也觉得加锁是可行的