找出由运行时间短的程序创建的线程数
Posted
技术标签:
【中文标题】找出由运行时间短的程序创建的线程数【英文标题】:find out the number of threads created by a short running program 【发布时间】:2010-04-15 08:15:43 【问题描述】:我的程序运行得足够快。我想看看程序创建的线程数。
ldd test
显示库 pthread 的使用。但是如何找出程序创建的线程数。我只能通过命令行访问运行程序的 PC。 平台是linux。
【问题讨论】:
【参考方案1】:也许使用 strace 并捕获对克隆的调用?
# strace -f -e trace=clone test
它应该指示测试创建的进程。
【讨论】:
strace 在系统上不存在。可能我可以复制 64 位版本的 strace 以及所需的共享库来试试这个 strace 是一个非常有用的实用程序,可以跟踪应用程序进行的系统调用。应该很容易安装。我编辑了答案以反映一种更具体的方式来捕获对 clone() 的调用 这是最好的解决方案。由于这是一台非生产机器,您可以安装 strace。 Strace 随您的发行版一起提供。【参考方案2】:使用LD_PRELOAD
,您应该能够充分包装pthread_create
,以便在每次输入时在某处记录。然而,这种方法是有缺陷的,因为它可能会在您的程序中引入(或暴露)本来不会发生的竞争,从而可能导致创建更多或更少的线程。
只是在程序中跟踪这一点(即,如果是调试版本)不是一个选项吗?
【讨论】:
如果可执行文件是闭源的怎么办? 或像 mpi 这样的库正在为其实现创建线程,这就是我想要使用的。当然,可以研究 mpi 源代码,但我想知道一般情况。以上是关于找出由运行时间短的程序创建的线程数的主要内容,如果未能解决你的问题,请参考以下文章
在visual studio中运行OpenMP并行程序,设置的线程数NUM_THREADS与系统CPU线程数啥关系
Servlet线程池与Servlet实例池 - 由Web容器组成