gpt4 book ai didi

multithreading - 为什么我的应用程序没有使用 Mac OS X 上的所有内核?

转载 作者:行者123 更新时间:2023-12-04 08:26:05 24 4
gpt4 key购买 nike

我有一个简单的 pthread 程序,它(应该)产生大量线程,这些线程只是自旋并消耗 CPU。但是,我从未在我的 Mac OS X Mavericks 笔记本电脑上看到这个程序占用了我 4 个内核中的 1 个以上。

关于为什么会发生这种情况的理论:

  • 这是阻止一个进程接管机器的操作系统吗?
  • OS X 调度程序是否对关联性非常严格?
  • 这是我可以调整的内核设置吗?
  • OS X 上的 pthread 实现是否有问题?

我不知道。

我问是因为我还有一个严肃的应用程序(用 D 编写),我想将所有 CPU 用于一些并行工作,但即使是最简单的 pthread 程序也不会超过 1 个核心。

#include <pthread.h>
#include <stdio.h>

void *waste_time(void* a) {
for (int i = 0; i < 10000000; i++) {
printf("%d\n", i);
}

return NULL;
}

int main(void) {
const int threads = 100;
pthread_t thread[threads];

for (int i = 0; i < threads; i++) {
pthread_create(&thread[i], NULL, waste_time, NULL);
}

for (int i = 0; i < threads; i++) {
pthread_join(thread[i], NULL);
}

return 0;
}

最佳答案

从 waste_time() 循环中取出 printf() 调用 - 它被调用了 10000000 次!完全摆脱它或将其放在循环之外,就在返回之前。

waste_time() 的操作目前由那个 C 库控制,并且在操作系统 I/O 下调用,为了防止灾难性的多线程访问标准输出,它有一个内部锁。锁序列化几乎整个进程的运行,因此操作系统可以(大部分)在一个内核上运行它。

关于multithreading - 为什么我的应用程序没有使用 Mac OS X 上的所有内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com