找出由运行时间短的程序创建的线程数

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容器组成

JVM

增加线程数,但程序不能更快地运行 C++ OpenMP 选择排序

进程与线程

当我运行多个与 CPU 核心/线程数匹配的线程时,每个线程会在单独的核心/线程上运行吗?