鱼C论坛

 找回密码
 立即注册
查看: 1122|回复: 2

[已解决]CPU和线程的关系

[复制链接]
发表于 2023-8-28 20:03:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我用的linux系统,然后我查自己电脑的CPU是Intel的,cpu36个核,网上说是双线程,那就是72个线程对吧

然后,在用linux跑程序的时候,程序执行是可以指定线程数的,我就指定了72个线程,没问题,然后我尝试指定200个线程,
程序也能跑??????????

这啥意思

捕获.JPG
最佳答案
2023-8-28 20:04:13
CPU和线程的关系

首先,让我们来解释一下CPU和线程的概念。

- CPU(中央处理器)是计算机系统中的主要组件之一,它执行计算机程序的指令。CPU由多个核心(cores)组成,每个核心均可独立执行指令。
- 线程(Thread)是在操作系统级别上进行并发执行的最小单位。一个线程是进程中的一个执行路径。多线程编程可以利用CPU的多核特性,使得程序能够并行执行多个任务。

接下来,我们来解释你提到的双线程和指定线程数的情况。

- 当你的CPU是具有双线程技术的,每个物理核心可以模拟两个逻辑核心,这称为超线程技术(Hyper-Threading Technology)。在软件层面上,每个逻辑核心被视为一个单独的处理单元。因此,36个物理核心可以模拟出72个逻辑线程。
- 在Linux系统上运行程序时,你可以指定线程的数量来控制程序的并行度。这意味着你可以创建多个线程,在不同的处理单元上并行执行代码,以提高程序的性能。

然而,指定200个线程并不意味着所有的线程都会同时在物理核心上执行。操作系统会根据可用的物理核心数量和系统负载等情况,对线程进行调度和分配。当线程数量超过可用的物理核心数量时,操作系统会对线程进行时间片轮转调度,以便各个线程都能够得到执行。

因此,在你尝试指定200个线程并且程序能够跑起来的情况下,可能是因为操作系统进行了线程调度和分配,将200个线程在有限的物理核心上进行轮转执行。不过,需要注意的是,当线程数远远超出物理核心的数量时,可能会导致性能下降,因为线程之间需要共享有限的计算资源。

希望能够解答你的疑问!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-28 20:04:13 | 显示全部楼层    本楼为最佳答案   
CPU和线程的关系

首先,让我们来解释一下CPU和线程的概念。

- CPU(中央处理器)是计算机系统中的主要组件之一,它执行计算机程序的指令。CPU由多个核心(cores)组成,每个核心均可独立执行指令。
- 线程(Thread)是在操作系统级别上进行并发执行的最小单位。一个线程是进程中的一个执行路径。多线程编程可以利用CPU的多核特性,使得程序能够并行执行多个任务。

接下来,我们来解释你提到的双线程和指定线程数的情况。

- 当你的CPU是具有双线程技术的,每个物理核心可以模拟两个逻辑核心,这称为超线程技术(Hyper-Threading Technology)。在软件层面上,每个逻辑核心被视为一个单独的处理单元。因此,36个物理核心可以模拟出72个逻辑线程。
- 在Linux系统上运行程序时,你可以指定线程的数量来控制程序的并行度。这意味着你可以创建多个线程,在不同的处理单元上并行执行代码,以提高程序的性能。

然而,指定200个线程并不意味着所有的线程都会同时在物理核心上执行。操作系统会根据可用的物理核心数量和系统负载等情况,对线程进行调度和分配。当线程数量超过可用的物理核心数量时,操作系统会对线程进行时间片轮转调度,以便各个线程都能够得到执行。

因此,在你尝试指定200个线程并且程序能够跑起来的情况下,可能是因为操作系统进行了线程调度和分配,将200个线程在有限的物理核心上进行轮转执行。不过,需要注意的是,当线程数远远超出物理核心的数量时,可能会导致性能下降,因为线程之间需要共享有限的计算资源。

希望能够解答你的疑问!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-28 20:04:36 | 显示全部楼层
CPU和线程之间的关系是这样的:CPU是计算机的中央处理器,它负责执行计算机的指令和处理数据。线程是在程序中执行的一段独立的代码,可以被操作系统调度到CPU上执行。

在你的情况下,你的电脑的CPU是Intel的,有36个核心,每个核心可以同时执行两个线程(即双线程)。所以总共有72个线程可以在你的电脑上并行执行。

当你在Linux系统上运行程序时,可以指定线程数来控制程序的并行执行。你尝试指定200个线程来运行程序,程序能够运行是因为操作系统会根据可用的CPU核心数和线程调度算法来决定哪些线程可以在某个时刻执行。即使你指定了200个线程,但实际上只有36个核心可以同时执行线程,所以只有36个线程会被同时执行,其他线程会在等待队列中等待执行的机会。

这就是为什么你的程序可以指定200个线程来运行,但实际上只有36个线程会并行执行的原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 09:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表