我想知道我是否初始化了四个std :: thread,这会使双线程cpu崩溃,还是std :: thread的虚拟线程。
我主要想知道因为我正在为课程编写的程序使用四个线程会更快,但我不知道我的分级器在他们的CPU上有多少线程。我有8个,但她很容易就有2个。我不想让她的系统崩溃,所以任何帮助都是
我是计算机科学的新手,所以我欢迎任何帮助。
答案 0 :(得分:2)
线程数不必限于核心数。操作系统只会在核心可用时安排线程。
也就是说,您可以使用{{1}}查找可用的核心/处理器数量,并根据您使用的线程数量。
答案 1 :(得分:0)
...如果我初始化了四个std :: thread,那么这会导致双线程崩溃 CPU
我怀疑你是在询问线程与核心......线程是独立于核心的。单核cpu可以运行多个线程。
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
此调用返回处理器的数量。我的老戴尔有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
命令顶部显示我有>状态正在运行或睡眠的178个任务,超过2个。
使用四个线程会更快,
我怀疑它会,但这不能保证。这是开发人员必须执行的另一项测试,以确认您的猜测。当线程相互交互时(信号量?消息传递?),你(或我)越来越不可能预测结果。
所以不值得让它成为四线程的吗?
我认为你应该在你的机器上测量两种形式的代码的性能。如果4个线程更快,那么另一台机器速度慢并不是你的错。
我建议计划录制持续时间......也许将其作为输出的一部分。