当前位置: 技术问答>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(),它统计的才是进程真正的执行时间。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。