进程,线程与多核,多cpu之间的关系

CPU主频就是CPU运算时的工作频率,在单核时间它是决定CPU性能的重要指标,一般以MHz和GHz位单位,如Phenom II X4 965主频是3.4GHz。说到CPU主频,就不得不提外频和倍频的概念,它们的关系是:主频=外频×倍频。

        虽然提高频率能有效提高CPU性能,但受限于制作工艺等物理因素,早在2004年,提高频率便遇到了瓶颈,于是Intel/AMD只能另辟途径来提升CPU性能,双核、多核CPU应运而生。

        其实增加核心数目就是为了增加线程数,因为操作系统是通过线程来执行任务的,一般情况下它们是1:1对应关系,也就是说四核CPU一般拥有四个线程。但Intel引入超线程技术后,使核心数与线程数形成1:2的关系,如四核Core i7支持八线程(或叫作八个逻辑核心),大幅提升了其多任务、多线程性能。

        CPU的虚拟化技术(Virtualization Technolegy,简称VT)就是单CPU模拟多CPU,并允许一个平台同时运行多个操作系统,而应用程序都可以在互相独立的空间内运行而互不影响,从而显著提高工作效率。在Windows 7中安装XP模式就是一个很好的例子,当需要使用XP时直接调用,不需要重启切换系统,这点对于程序员来说是非常有用的。
        虽然虚拟化可以通过软件实现,但是CPU硬件支持的话,执行效率会大大提升,也可以支持64位操作系统,其中Windows 7的XP模式则是必须要CPU的虚拟技术支持。目前Intel/AMD绝大部分CPU都支持虚拟化技术,但对于普通用户而言,虚拟化技术没有实质作用。如果要用到虚拟化技术,需要在BIOS开启技术。

        随着CPU的性能越来越强大,也带来了更高的功耗,为减少CPU闲置使得能量浪费,Intel和AMD均不约而同地为CPU添加节能技术。Intel方面,采用节能技术叫“Enhance Intel SpeesStep Technology”,简称EIST,虽然经过多次增强优化,但名字始终没变。但名字始终没变。而AMD的节能技术则是“Cool ‘n’Quiet”,现在已经发展到3.0版。简单来说,它们均是在CPU空闲时自动降低CPU的主频,从而降低CPU功耗与发热量,达到节能目的。

        无论是Intel还是AMD的节能技术,均需要在BIOS开启才有效,找到类似EIST(Intel CPU)或(AMD CPU)的选项进行行开启即可

 

cpu个数是指物理上安装了几个cpu,一般的个人电脑是安装了1个cpu

cpu内核数是指物理上,一个cpu芯片上集成了几个内核单元,现代cpu都是多核的。

cpu线程数是指逻辑上处理单元,这个技术是Intel的超线程技术,它让操作系统识别到有多个处理单元。

如下图所示:插槽指cpu个数,内核数量是2个,线程数是4个

 

上下文切换(也称做进程切换或任务切换):是指 CPU 从一个进程或线程切换到另一个进程或线程。

进程(有时候也称做任务):是指一个程序运行的实例。

线程:在 Linux 系统中,线程就是能并行运行并且与他们的父进程(创建他们的进程)共享同一地址空间(一段内存区域)和其他资源的轻量级的进程。

上下文:是指某一时间点 CPU 寄存器和程序计数器的内容。

寄存器:是 CPU 内部的数量较少但是速度很快的内存(与之对应的是 CPU 外部相对较慢的 RAM 主内存)。寄存器通过对常用值(通常是运算的中间值)的快速访问来提高计算机程序运行的速度。

程序计数器:是一个专用的寄存器,用于表明指令序列中 CPU 正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置,具体依赖于特定的系统。

I/O 可以被定义为任何信息流入或流出 CPU 与主内存(RAM)。也就是说,一台电脑的 CPU和内存与该电脑的用户(通过键盘或鼠标)、存储设备(硬盘或磁盘驱动)还有其他电脑的任何交流都是 I/O。

稍微详细描述一下,上下文切换可以认为是内核(操作系统的核心)在 CPU 上对于进程(包括线程)进行以下的活动:
(1)挂起一个进程,将这个进程在 CPU 中的状态(上下文)存储于内存中的某处;
(2)在内存中检索下一个进程的上下文并将其在 CPU 的寄存器中恢复;
(3)跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码行),以恢复该进程

上下文切换的消耗

上下文切换通常是计算密集型的。也就是说,它需要相当可观的处理器时间,在每秒几十上百次的切换中,每次切换都需要纳秒量级的时间。所以,上下文切换对系统来说意味着消耗大量的 CPU 时间,事实上,可能是操作系统中时间消耗最大的操作。
Linux相比与其他操作系统(包括其他类 Unix 系统)有很多的优点,其中有一项就是,其上下文切换和模式切换的时间消耗非常少

目录

cpu架构和工作原理

计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到一起,加上寄存器组和cpu内部总线构成中央处理器(CPU)。cpu的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,cpu从逻辑上可以划分为3个模块:控制单元、运算单元和存储单元。这三个部分由cpu总线连接起来。

CPU的运行原理就是:控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后CPU把数据读到CPU的内部存储单元(就是内部寄存器)暂存起来,最后命令运算单元对数据进行处理加工。周而复始,一直这样执行下去。

多核cpu和多cpu

架构

多个物理CPU,CPU通过总线进行通信,效率比较低。

多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信

cpu的缓存

CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。

随着多核CPU的发展,CPU缓存通常分成了三个级别:L1L2L3。级别越小越接近CPU,所以速度也更快,同时也代表着容量越小。L1 是最接近CPU的, 它容量最小(例如:32K),速度最快,每个核上都有一个 L1 缓存,L1 缓存每个核上其实有两个 L1 缓存, 一个用于存数据的 L1d Cache(Data Cache),一个用于存指令的 L1i Cache(Instruction Cache)。L2 缓存 更大一些(例如:256K),速度要慢一些, 一般情况下每个核上都有一个独立的L2 缓存; L3 缓存是三级缓存中最大的一级(例如3MB),同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个 L3 缓存。

读取数据过程。就像数据库缓存一样,首先在最快的缓存中找数据,如果缓存没有命中(Cache miss) 则往下一级找, 直到三级缓存都找不到时,向内存要数据。一次次地未命中,代表取数据消耗的时间越长。

计算过程。程序以及数据被加载到主内存;指令和数据被加载到CPU的高速缓;CPU执行指令,把结果写到高速缓存;高速缓存中的数据写回主内存

进程和线程

  1. 进程是资源分配的最小单位,一个程序有至少一个进程。线程是程序执行的最小单位。一个进程有至少一个线程。
  2. 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
  3. 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
  4. 多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

进程和线程在多核cpu,多cpu中的运行关系

多cpu的运行,对应进程的运行状态;多核cpu的运行,对应线程的运行状态。

操作系统会拆分CPU为一段段时间的运行片,轮流分配给不同的程序。对于多cpu,多个进程可以并行在多个cpu中计算,当然也会存在进程切换;对于单cpu,多个进程在这个单cpu中是并发运行,根据时间片读取上下文+执行程序+保存上下文。同一个进程同一时间段只能在一个cpu中运行,如果进程数小于cpu数,那么未使用的cpu将会空闲。

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
对于多核cpu,进程中的多线程并行执行,执行过程中存在线程切换,线程切换开销较小。对于单核cpu,多线程在单cpu中并发执行,根据时间片切换线程。同一个线程同一时间段只能在一个cpu内核中运行,如果线程数小于cpu内核数,那么将有多余的内核空闲。

总结

1 单CPU中进程只能是并发,多CPU计算机中进程可以并行。

2单CPU单核中线程只能并发,单CPU多核中线程可以并行。

3 无论是并发还是并行,使用者来看,看到的是多进程,多线程。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中的多线程和多进程都是用来实现并发执行的方式,可以同时执行多个任务,提高程序的运行效率。但是它们的实现方式和适用场景有所不同。 多线程是指在一个进程内创建多个线程,每个线程都可以独立执行任务。多线程适用于IO密集型的任务,如网络请求、文件读写等,因为在IO操作时可以让其他线程继续执行,提高了效率。Python中的`threading`模块可以用来创建和管理线程。 多进程是指在操作系统中同时创建多个进程,每个进程都有自己的地址空间和系统资源,可以独立执行任务。多进程适用于CPU密集型的任务,如大量计算、图像处理等,因为每个进程都可以利用多核CPU进行并行计算,提高了效率。Python中的`multiprocessing`模块可以用来创建和管理进程。 需要注意的是,Python中的多线程由于全局解释器锁(GIL)的存在,不能实现真正的并行运行。如果需要充分利用多核CPU进行并行计算,应该使用多进程。但是在某些特定情况下,多线程仍然可以提高程序的效率,如IO密集型任务。 总结一下: - 多线程适用于IO密集型任务,可以提高程序的效率。 - 多进程适用于CPU密集型任务,可以充分利用多核CPU进行并行计算。 - Python中的多线程由于GIL的存在,不能实现真正的并行运行。如果需要充分利用多核CPU,应该使用多进程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值