使用 std::thread 在 C++ 中进行线程化
Threading in C++ using std::thread
我想知道如果我初始化四个 std::thread ,这会导致双线程 cpu 崩溃还是 std::thread 是虚拟线程之类的东西。
我主要想知道,因为我正在为 class 编写的程序使用四个线程会运行得更快,但我不知道我的评分者在他们的 CPU 上有多少个线程。我的有 8 个,但她的很容易有 2 个。我不想让她的系统崩溃,所以任何帮助都是
我是计算机科学的新手,所以我欢迎任何我能得到的帮助。
线程数不必受内核数限制。 OS 只会在内核可用时安排线程。
就是说,您可以使用 hardware_concurrency()
来确定有多少 cores/processors 可用,并以此为基础确定您使用的线程数。
... if I initialize four std::thread 's, will this crash a dual thread
cpu
我怀疑您是在询问线程与核心的关系……线程独立于核心。一个核心 cpu 可以 运行 个线程。
- N 个线程,其中 N > 核心数,不会使 Linux 系统崩溃。
Linux 提供了一个特殊的文件。我在我的 C++ 程序中使用了自己开发的 grep 版本来读取和计算这个特殊文件中有多少行包含字符串 "processor"。
// The special file of Ubuntu -- vvvvvvvvvvvvv
size_t retVal = DTB::grep(std::string("/proc/cpuinfo"),
std::string("processor"), // line count of "processor" is core count
nullDev); // dev/null -- no output
这次调用 returns 处理器的计数。我的旧戴尔有 2.
文件的前几行如下所示:
$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 75
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 5000+
stepping : 2
cpu MHz : 1000.000
cache size : 512 KB
命令 top 显示我有 > 178 个任务处于 运行宁或睡眠状态,比 2 个多很多。
would go much faster with four threads,
我怀疑会,但不能保证。这是开发人员必须执行的另一项测试,以确认您的猜测。当线程相互交互(信号量?消息传递?)时,您(或我)越来越不可能预测结果。
So its not worth it to make it quad threaded?
我认为您应该在您的机器上测量两种形式的代码的性能。如果 4 个线程更快,那么另一台机器更慢并不是你的错。
我建议计划记录持续时间...也许将其作为输出的一部分。
我想知道如果我初始化四个 std::thread ,这会导致双线程 cpu 崩溃还是 std::thread 是虚拟线程之类的东西。
我主要想知道,因为我正在为 class 编写的程序使用四个线程会运行得更快,但我不知道我的评分者在他们的 CPU 上有多少个线程。我的有 8 个,但她的很容易有 2 个。我不想让她的系统崩溃,所以任何帮助都是
我是计算机科学的新手,所以我欢迎任何我能得到的帮助。
线程数不必受内核数限制。 OS 只会在内核可用时安排线程。
就是说,您可以使用 hardware_concurrency()
来确定有多少 cores/processors 可用,并以此为基础确定您使用的线程数。
... if I initialize four std::thread 's, will this crash a dual thread cpu
我怀疑您是在询问线程与核心的关系……线程独立于核心。一个核心 cpu 可以 运行 个线程。
- N 个线程,其中 N > 核心数,不会使 Linux 系统崩溃。
Linux 提供了一个特殊的文件。我在我的 C++ 程序中使用了自己开发的 grep 版本来读取和计算这个特殊文件中有多少行包含字符串 "processor"。
// The special file of Ubuntu -- vvvvvvvvvvvvv
size_t retVal = DTB::grep(std::string("/proc/cpuinfo"),
std::string("processor"), // line count of "processor" is core count
nullDev); // dev/null -- no output
这次调用 returns 处理器的计数。我的旧戴尔有 2.
文件的前几行如下所示:
$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 75
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 5000+
stepping : 2
cpu MHz : 1000.000
cache size : 512 KB
命令 top 显示我有 > 178 个任务处于 运行宁或睡眠状态,比 2 个多很多。
would go much faster with four threads,
我怀疑会,但不能保证。这是开发人员必须执行的另一项测试,以确认您的猜测。当线程相互交互(信号量?消息传递?)时,您(或我)越来越不可能预测结果。
So its not worth it to make it quad threaded?
我认为您应该在您的机器上测量两种形式的代码的性能。如果 4 个线程更快,那么另一台机器更慢并不是你的错。
我建议计划记录持续时间...也许将其作为输出的一部分。