当前位置: 技术问答>linux和unix
请问对于多线程程序应该如何测试线程的切换开销呢
来源: 互联网 发布时间:2016-03-27
本文导语: 我做了一个程序的两个版本,跑同样的20个数据,用线程实现(启动20个线程分别处理20个数据)需要用8秒;和用进程实现(启动20个进程分别处理20个数据)却只需要4秒,不是应该是线程的运行速度要高于进程么,怎...
我做了一个程序的两个版本,跑同样的20个数据,用线程实现(启动20个线程分别处理20个数据)需要用8秒;和用进程实现(启动20个进程分别处理20个数据)却只需要4秒,不是应该是线程的运行速度要高于进程么,怎么反了呢?我怀疑会不会是线程进行切换时会有很大的开销,应该如何测试线程切换的开销呢,另外多进程环境下应该不会有进程切换的开销吧。谢谢
|
你的进程处理结果是以空间资源换时间得到的,进程远比线程消耗的空间资源多。整个系统内进程是有限资源,线程远比进程多的多。
|
用time肯定不准确.
号称intel的vtune,thread profile可以看到线程切换的时序图.
不过工具强大了掌握起来就有点罗嗦.呵呵,我还在摸说中.
如果是windows中,有一个获取cpu/thread时间的api.好象是getsystemtime...
号称intel的vtune,thread profile可以看到线程切换的时序图.
不过工具强大了掌握起来就有点罗嗦.呵呵,我还在摸说中.
如果是windows中,有一个获取cpu/thread时间的api.好象是getsystemtime...
|
用time()测量执行时间,不要用gettimeofday。
你的所有线程都是同时启动的,实际的执行时间是10份5,20份11,30份16,正常。
你的所有线程都是同时启动的,实际的执行时间是10份5,20份11,30份16,正常。
|
wall clock time就是日常的时间,gettimeofday返回值的差就是这个值,在这个时间内,系统可以调度执行很多的进程(线程),每个进程的执行时间都不是这个时间差。要想知道每个进程的执行时间,要用time(),它统计的才是进程真正的执行时间。