首页
学习
活动
专区
圈层
工具
发布

物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket

如果我们又增加了超线程(不同于多线程),我们就会开始不知道计算机里面到底有多少核心,我们搞不明白为什么像 htop 这样的命令会在我们认为买的是一台单核计算机上返回拥有 8 个 CPU 的结果。...起源:单核CPU和超线程 在诸如多核、虚拟 CPU 和逻辑 CPU 这样的概念诞生前,在奔腾系列处理器的年代,大部分计算机在它们的主板上装备了一块不大不小的芯片,我们把它叫做微处理器、处理器或直接叫 CPU...这样, 从 Linux 或者其他操作系统的视角来看,一个单核 CPU 计算机通过超线程技术呈现出双核 CPU 的效果,但两个逻辑 CPU 实际上在同一个物理 CPU 中执行。...复杂:多核架构的出现 正如我在前面部分所说的,尽管开启了超线程的 CPU 能够提供更强的计算能力,但并不能提供 2 倍的处理能力和 2 个独立的 CPU,所以我打算进一步缩小 CPU 元件的视角,并且把它们都安装到统一块芯片上...确实,从性能的角度来看,拥有单个多核芯片要比同一个主板上拥有多个单核芯片提供更好的性能。当然,拥有一个双数核心要比单数核心更好。 在操作系统层,一个物理的四核处理器可以看做是四个 CPU。

3K30

Python 多线程是鸡肋?

这种解决办法放在90年代,其实是没什么问题的,毕竟,那时候的硬件配置还很简陋,单核 CPU 还是主流,多线程的应用场景也不多,大部分时候还是以单线程的方式运行,单线程不要涉及线程的上下文切换,效率反而比多线程更高...(在多核环境下,不适用此规则)。...还真有人这么干多,但是结果令人失望,在1999年Greg Stein 和Mark Hammond 两位哥们就创建了一个去掉 GIL 的 Python 分支,在所有可变数据结构上把 GIL 替换为更为细粒度的锁...这种解决办法放在90年代,其实是没什么问题的,毕竟,那时候的硬件配置还很简陋,单核 CPU 还是主流,多线程的应用场景也不多,大部分时候还是以单线程的方式运行,单线程不要涉及线程的上下文切换,效率反而比多线程更高...(在多核环境下,不适用此规则)。

1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python Web学习笔记之GIL机制下的鸡肋多线程

    为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋?...因此,这也就是为什么两个线程一起执行反而更加慢的原因,因为同一时刻,只有一个线程在运行,其它线程只能等待,即使是多核CPU,也没办法让多个线程「并行」地同时执行代码,只能是交替执行,因为多线程涉及到上线文切换...这种解决办法放在90年代,其实是没什么问题的,毕竟,那时候的硬件配置还很简陋,单核 CPU 还是主流,多线程的应用场景也不多,大部分时候还是以单线程的方式运行,单线程不要涉及线程的上下文切换,效率反而比多线程更高...(在多核环境下,不适用此规则)。...还真有人这么干多,但是结果令人失望,在1999年Greg Stein 和Mark Hammond 两位哥们就创建了一个去掉 GIL 的 Python 分支,在所有可变数据结构上把 GIL 替换为更为细粒度的锁

    79360

    为什么有人说 Python 多线程是鸡肋?

    为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋?...因此,这也就是为什么两个线程一起执行反而更加慢的原因,因为同一时刻,只有一个线程在运行,其它线程只能等待,即使是多核CPU,也没办法让多个线程「并行」地同时执行代码,只能是交替执行,因为多线程涉及到上线文切换...这种解决办法放在90年代,其实是没什么问题的,毕竟,那时候的硬件配置还很简陋,单核 CPU 还是主流,多线程的应用场景也不多,大部分时候还是以单线程的方式运行,单线程不要涉及线程的上下文切换,效率反而比多线程更高...(在多核环境下,不适用此规则)。...还真有人这么干多,但是结果令人失望,在1999年Greg Stein 和Mark Hammond 两位哥们就创建了一个去掉 GIL 的 Python 分支,在所有可变数据结构上把 GIL 替换为更为细粒度的锁

    1.2K60

    滚动回归中调用多核CPU

    这个运算在大猫的i7 3.5G+32G+1T SSD的地球人上似乎要永远运行下去,于是大猫只得乖乖停止进程思考提高运算效率的办法。...载 入并设置doParalle 为了能够调用多核,我们需要首先根据CPU的核心数来进行设置,下面是大猫在自己4核8线程CPU上的设置代码。...如果你的CPU没有超线程,直接根据核心数设置即可 # 在大猫的机器上,核心数从4提高到8只带来小幅提高 cl <= makeCluster(8) # 注册你的并行计算集群 # 过程中有可能弹出Windows...如果改为 %do%,那么则使用单核,因而 %do% 适合用来作为评估多核性能的benchmark。 4. .final 参数。...毕竟对于并行计算来说,无论是CPU多核还是AMD的Crossfire或者Nvidia的SLI,都不可能达到1+1=2的效果。doParalle在大猫的四核CPU上时间节约了2/3,大猫已经很开心啦。

    1.9K20

    五分钟让你搞懂“Volatile”关键字是如何帮助Java解决可见性问题的

    为什么会发生“可见性”的问题要从CPU开始说起了。 在计算机执行程序时,CPU负责处理每条指令。...由于CPU的速度非常快,而访问物理内存中的数据速度相对较慢,这种速度差异会导致CPU在等待数据时出现闲置。为了解决这个问题,CPU内部集成了高速缓存。...最早的单核CPU是这样处理指令的: 在单核CPU下就是有一百个线程,也不会触发线程安全问题,因为所有的线程操作的都是一个缓存变量。...可是坏就坏在由于技术的不断发展,人们对CPU的性能提出了更高的需求,希望其可以处理更加复杂的任务。 多核CPU应运而生,而在多核CPU下,线程可能不再操作同一个缓存区。...这个时候CPU与内存的数据一致性问题旧爆发了,当多个线程在不同的CPU上执行的时候,这些线程操作的是不同的CPU缓存。

    70410

    Intel Xeon 8269CY比8255C主频占优,但优势绝不是表面上的0.1GHz

    事实就是这2款CPU本身差异较大,阿里云标注了全核睿频3.2GHz,腾讯云没标"全核",有没有这2个字很关键,在特定测试用例上会看到这种差异,无法从虚拟化方面进行优化。...ESSD PL1云盘 对标 腾讯云增强型SSD 云盘",用CineBench R23压测多核、单核(点下图右侧的start按钮就行,每次测试大概需要15分钟,可不是最中间的那10分钟,因为有首尾几分钟的启动...96核: 单核均值815 多核均值38452 阿里云 计算型弹性裸金属服务器实例规格族ebmc6 ecs.ebmc6.26xlarge用CineBench R23压测情况如下 ​8269CY 104核...: 单核均值853.5 多核均值47808 如果要定性2种机型哪个CPU性能更强,用CPU-Z就可以快速定性(两分钟定性孰强孰弱,只是定性方便,平时我们还是以CineBench R23为准,这个是带渲染跑的...总之,全核压测的参考价值大,单核的最好自己指定到单核上实测,单核压测的结果适合简单定性,在业务上的差距到底如何,以业务实测为准。

    2.5K10

    Java内存模型的深入分析

    既然单核遇到了瓶颈,为什么不发展多核呢? 不知道谁想到了这个点子,一下引爆了整个计算机行业,是啊,单核不行了我们可以发展多核嘛,自此,整个计算机行业都开始向多核转变,也由此进入到了多核的大航海时代。...上面我们提到,在单核时代,为了追求代码的极致性能,我们在编译时和运行时都对内存操作做了各种乱序处理,虽然已经通过一定的方式,让这种乱序不影响到上层开发,对上层逻辑透明,但这种方式只对单核有效,进入到多核时代...,单核运行不可见的乱序,在多核情况下都可见了,且此种乱序已经严重影响到了多核代码的正确编写。...默认乱序执行,在关键节点保证有序,这种方式不仅使单核时代的各种乱序优化依然有效,也使多核情况下的乱序行为有了一定的规范。...假设方法f1,f2分别被两个线程独立执行,那r1,r2的值分别是多少? 先说答案,r1的值一定是1,r2的值无法确定。 为什么呢?

    42110

    python GIL解释器

    在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。...即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。 Python解释器进程内的多线程是合作多任务方式执行。当一个线程遇到I/O任务时,将释放GIL。...计算密集型(CPU-bound)的线程在执行大约100次解释器的计步(ticks)时,将释放GIL。计步(ticks)可粗略看作Python虚拟机的指令。计步实际上与时间片长度无关。...可以通过sys.setcheckinterval()设置计步长度。 在单核CPU上,数百次的间隔检查才会导致一次线程切换。在多核CPU上,存在严重的线程颠簸(thrashing)。...为了更有效的利用多核处理器的性能,就出现了多线程的编程方式,而随之带来的就是线程间数据的一致性和状态同步的完整性。

    1.3K40

    多线程面试题(2021最新版)

    1)发挥多核CPU 的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4 核、8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上 就浪费了 50%...单核 CPU 上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快, 看着像多个线程"同时"运行罢了。...多核 CPU 上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU 的优势来,达到充分利用CPU 的目的。...2)防止阻塞 从程序运行效率的角度来看,单核 CPU 不但不会发挥出多线程的优势,反而会因为在单核CPU 上运行多线程导致线程上下文的切换,而降低程序整体的效率。...[ap69380e7m.png] 55、为什么你应该在循环中检查等待条件? [zoooazbe4r.png] 56、Java 中堆和栈有什么不同?

    17.3K36

    金三银四面试:C#.NET面试题高级篇1-多线程

    10、为什么GUI不支持跨线程调用?有什么解决方法? 1、描述线程与进程的区别?...(1)发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU...单核CPU上所谓的”多线程”那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程”同时”运行罢了。...多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。...(2)防止阻塞 从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。

    2.9K50

    【高并发】32位多核CPU并发读写long型数据为何会出现诡异问题?看完这篇我懂了!

    诡异的问题 我们在32位多核CPU的计算机上以多线程的方式读写long类型的共享变量时,线程已经将变量成功写入了内存,但是重新读取出来的数据和之前写入的数据不一致,这到底是为什么呢?...在操作系统层面来看,操作系统做线程切换需要依赖CPU的中断机制,所以说,禁止CPU发生中断就能够禁止线程切换。 这种方案在单核CPU上是可行的,但是并不适合多核CPU。...32位单核CPU 在32位单核CPU场景下,同一时刻只有一个线程执行,禁止CPU中断,也就是说,在单核CPU上,操作系统不会重新调度线程,实际上,也就是禁止了线程切换。...32位多核CPU 在32位多核CPU场景下,同一时刻,可能有两个甚至更多的线程在同时执行。...注意:不只是long型变量,在32位多核CPU上并发写64位数据类型的数据,都会出现类似的诡异问题!!!

    73820

    宋宝华:深入理解cache对写好代码至关重要

    这个显然是没有必要的,在硬件上,cache的snooping控制单元,可以协助直接把CPU_A的p地址cache拷贝到CPU_B、C和D的cache。...这样,就实现硬件意义上的cache同步。当然,硬件的cache同步,还有一些其他方法,原理上是类似的。注意,这种同步仍然不是免费的,它仍然会消耗bus cycles的。...避免false sharing 前面我们提到过,数据如果在一个cacheline,被多核访问的时候,多核间运行的cache一致性协议,会导致cacheline在多核间的同步。...为什么要有Cache?为什么要有多级Cache?...为什么要有Cache这个问题想必大家心里都已经有了答案了吧,CPU直接访问距离较远,容量较大,性能较差的主存速度很慢,所以在CPU和内存之间插入了Cache,CPU访问Cache的速度远高于访问主存的速度

    2.1K50

    内存避障的前世今生

    ok在单核能保证顺序一致性的前提下继续讨论(X86),在多核场景下,MESI保证了多核间缓存数据的强一致性。...在顺序一致的世界中,其他处理器看到的顺序应该和第三个处理器一样,所有处理器应该都能看到一样的事件队列。 在多核处理器上,很多事情可以同时发生,除非涉及内存访问。...参考上一篇中的实例内存避障fence(一)一个内存乱序实例可知,x86不提供多核场景下的顺序一致性,但保证单核的顺序一致性。 x86单核上多指令队列也是乱序执行的,为什么能保证一致性? ....因为单核的执行结果会有指令重拍,storebuffer是严格FIFO的,虽然执行时乱序,但输出时一定有序。 注意ARM在单核上也没有顺序一致性的保证。...3.5 实例:加入内存屏障解决问题 硬件 level 上很难揣度软件上这种前后数据依赖关系,因此往往无法通过某种手段自动的避免这种问题,因而只有通过软件的手段表示(对应也需要硬件提供某种指令来支持这种语义

    98710

    科技:最强大的 Windows 和 Mac 笔记本电脑比较

    简要了解一下架构 Apple M3 Max 是一款基于 ARM 的片上系统 (SoC),目前是 Apple Silicon 产品线的高端产品。...测试项目及结果 Geekbench 6 单核/多核性能 Geekbench 6测试单核和多核性能,是衡量CPU性能的重要指标: MacBook Pro (M3 Max): 3174 / 21137 Lenovo...Legion 9i: 2959 / 17367 从Geekbench 6的单核和多核测试结果来看,MacBook Pro (M3 Max)在单核性能上遥遥领先,达到了3174分,多核性能也表现优秀,达到...Lenovo Legion 9i虽然在单核性能上略逊一筹,但其多核性能依然强劲。...Cinebench R24 单核/多核性能 Cinebench R24是另一个常用的CPU性能测试工具: MacBook Pro (M3 Max): 139 / 1522 Lenovo Legion 9i

    1.5K10

    CPU 核数与线程数有什么关系?

    这里出现了一个有点拗口的名词,地址空间,Address Space,值得注意的是,计算机系统还在单核时代就已经有多线程的概念了,我们之前说过,即使是单核也可以执行多个线程,那么有的同学可能会有疑问,在单核的系统中开启多个线程有什么意义吗...单核与多线程 假设现在有两个任务,任务A和任务B,每个任务需要的计算时间都是5分钟,那么无论是任务A和任务B串行执行还是放到两个线程中并行执行,在单核环境下执行完这两个任务总需要10分钟,因此有的同学觉得单核下多线程没什么用...当然,这一切的前提是你的场景不涉及高性能以及高并发,在这种简单的场景下,你创建线程时也不需要关心系统中是单核还是多核。 多核时代 实际上,线程这个概念是从2003年左右才开始流行的,为什么?...因为这一时期,多核时代到来了。 之所以产生多核,是因为单核的性能提升越来越困难了。...,因为在单核时代,所有的任务都不是在同时向前推进,而是“交错”前进,A前进一点,然后B前进一点,线程并不是实现这种“伪并行”唯一的方法,状态机也可以。

    7.9K40

    从多核到众核处理器

    当然,这样的名词是很吸引眼球的,不过什么东西都得从实际出发,这篇文章也就简单地分析了为什么有多核这个事情,以及多核系统的挑战。 为什么有多核处理器?...之后我们来谈论一下,首先,为什么有多核处理器?从Intel 80286到Intel Pentium 4大概二十多年的时间都是单核处理器的天下,为什么最近几年单核处理器却销声匿迹了?...不过在我们深入了解这两个问题前还是先回顾一下多核处理器的发展之路,目的是看看人们怎么从单核走到多核的。 多核的点子最早学术界提出的。...这种结构的始祖(当然也是片上多核的始祖)是Hydra。 斯坦福的Hydra处理器是最早提出的片上多核处理器。...在单核的年代,进行这种计算的处理器叫DSP(Digital Signal Processor),以有别于CPU这种擅长控制和跳转的处理器。

    1.7K30

    运维锅总详解CPU

    本文从CPU简介、衡量CPU性能指标、单核及多核CPU工作流程、如何平衡 CPU 性能和防止CPU过载、为什么计算密集型任务要选择高频率CPU、超线程技术、CPU历史演进及摩尔定律等方面对CPU进行详细分析...L2缓存(二级缓存): 容量比L1大,速度较慢(通常几百KB到几MB)。 L3缓存(三级缓存): 共享缓存,容量最大,速度相对较慢(通常几MB到几十MB)。...单核CPU工作流程举例 假设我们有以下寄存器和内存状态: 寄存器 R2 的值为 5 寄存器 R3 的值为 10 指令 ADD R1, R2, R3 存储在内存地址 0x1000 取指令: PC = 0x1000...这种设计允许 CPU 在一个核心上“模拟”多个线程的执行,从而提高并行处理能力。...早期的处理器如 Intel 4004 和 8086 代表了这种增长。 1980s-1990s:多核处理器的引入,使得处理器性能继续提升。

    1.6K11

    从多核到众核处理器

    当然,这样的名词是很吸引眼球的,不过什么东西都得从实际出发,这篇文章也就简单地分析了为什么有多核这个事情,以及多核系统的挑战。 为什么有多核处理器?...之后我们来谈论一下,首先,为什么有多核处理器?从Intel 80286到Intel Pentium 4大概二十多年的时间都是单核处理器的天下,为什么最近几年单核处理器却销声匿迹了?...不过在我们深入了解这两个问题前还是先回顾一下多核处理器的发展之路,目的是看看人们怎么从单核走到多核的。 多核的点子最早学术界提出的。...这种结构的始祖(当然也是片上多核的始祖)是Hydra。 斯坦福的Hydra处理器是最早提出的片上多核处理器。...在单核的年代,进行这种计算的处理器叫DSP(Digital Signal Processor),以有别于CPU这种擅长控制和跳转的处理器。

    1.1K10

    Python中的GIL是个什么玩意?

    2、每个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念。...并且由于GIL锁存在,python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行),这就是为什么在多核CPU上,python的多线程效率并不高。...多核多线程比单核多线程更差,原因是单核下多线程,每次释放GIL,唤醒的那个线程都能获取到GIL锁,所以能够无缝执行,但多核下,CPU0释放GIL后,其他CPU上的线程都会进行竞争,但GIL可能会马上又被...CPU0拿到,导致其他几个CPU上被唤醒后的线程会醒着等待到切换时间后又进入待调度状态,这样会造成线程颠簸(thrashing),导致效率更低 回到最开始的问题:经常我们会听到老手说:“python下想要充分利用多核...原因是:每个进程有各自独立的GIL,互不干扰,这样就可以真正意义上的并行执行,所以在python中,多进程的执行效率优于多线程(仅仅针对多核CPU而言)。

    1.6K20
    领券