首页 > 解决方案 > 最大线程数 - 如何确定您的 C++ pthreads 是否并行运行?

问题描述

我对多线程编程的了解不够。在我的 C++ 程序中,我创建了 10 个 pthread,每个 pthread 负责处理流向系统的实时数据的一部分。最终在 main() 内部,来自所有线程的已处理数据被合并。据我所知,可以并行运行的线程的确切数量由每个插槽的核心数 x 每个插槽的线程数 x 插槽决定,在我的例子中是 8 (4 x 2 x 1)。那么在我的具有 10 个线程的应用程序中,是否没有发生颚化,并且在不同线程之间交换是调度程序所做的事情?如果没有,有什么方法可以确定吗?或者至少我可以知道这种交换需要多少毫秒?由于我的应用程序正在处理实时数据,因此确保所有线程并行运行至关重要。

标签: c++parallel-processingpthreads

解决方案


“据我所知,线程的确切数量......”

某种意义上——还有超线程可以解决问题;还有一个事实是 C++ 可以在非 PC 上运行。(即嵌入式设备)将具有静态编号。

“是调度程序所做的”

是的。但不仅仅是你的线程;操作系统和其他应用程序的所有线程也受此控制。

或者至少我能知道这种交换需要多少毫秒

不; 也没有关系,因为你对此无能为力。您能做的最好的事情是尝试跟踪您的线程上有多少 CPU 时间,计算出单个线程可用的总 CPU 时间;然后你可以算出你有多少时间;但同样,您永远不需要这样做,因为这可能意味着您的程序正在担心它无法控制的事情。更有意义的是监控机器的 CPU 使用率。

由于我的应用程序正在处理实时数据,因此确保所有线程并行运行至关重要。

你的线程如何运行并不取决于你。这取决于操作系统。您的计算机上还有其他比程序更重要的任务。例如,操作系统需要处理时间来处理应用程序对内存的任何请求。

一些操作系统实际上能够以更专业的方式做到这一点。例如 Qnix 是一个实时操作系统;但这需要付出其他代价。

您可以确定的一件事;是,如果您的最大可能线程数为 8;你创造了 10 个;您不会让它们全部并行运行。您可能希望查看一些有助于确保您创建的线程始终处于忙碌状态的库;boost::asio例如


推荐阅读