精华内容
下载资源
问答
  • Java:线程:CPU核心数目 与 多线程
    千次阅读
    2018-10-01 00:16:29

    1.多线程的几个状态?以及何时处于这个状态?

           开始(创建):在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。

      就绪:当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。

      运行:线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。

      阻塞: 线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。

      结束:如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。

    2.时间片的概念是什么?


    时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。 

    ================================================================================

     

    一直以来有这样的疑惑,在现如今多核多线程的电脑处理器之下,一个进程中的几个线程是 怎么运行的呢?(是经系统和JVM分配少量的资源 最后轮流切换 时间调度?还是这几个线程分配到不同的核上同时运行?)
    今天就这一问题查了一些资料,现整理如下:

    单个CPU一个时刻只能运行一个线程?

    单核CPU电脑同一时间内只能执行一个线程,首先了解一下,CPU执行的过程 ,它是把时间分成若干个小时间段,这些时间段很小的,系统中有很多进程,每个进程中又包含很多线程,在同一 时间段 内,电脑CPU只能处理一个线程(线程A),而下一个 时间段 就不一定是上一个时间段内执行的那个线程(线程A)了,可能是别的线程(线程B 吧)

    CPU采用的是类似于时间片轮转的机制,也就是说同一时间一条进程提出执行请求时,其他进程只能等待它执行完毕,CPU才会处理其他请求。其他进程相当于在排队等待中。当然了,为了避免某条进程无限制时间的执行,一般会限定一个时间,超时 的话,CPU根据一定的线程调度算法来切换线程。可以看做很多线程在并发执行。其实还是在某一个时间点上只有一个线程在运行罢了。
    多核的话,每个核心都是同样的原理。但是两个核心就可以通过系统分配资源,同时执行不同的进程,这个就更复杂了。
    每条进程都有CPU分配的进程号的。避免混乱。

    一个核心就是实实在在的一个cpu处理设备 线程的概念可以理解成电脑处理信息的通道 既一个线程一个通道 一般来说一个cpu核心处理一个通道的信息 但也不是绝对 因特尔支持超线程技术的cpu每个核心可以处理两个或多个通道的信息 这就可以形容为超线程(既多出来的通道的处理能力)但前提是软件也必须的支持超线程才行 否则单核双线程或多线程也只能有单个通道工作 从某种意义上来说cpu的能力被浪费了 所以网友一般就会说 真正的核心数(通道) 比虚拟出来的核心(通道)来个更实在。最后 线程数决定这CPU能同时处理几件事情,在没有超线程技术的情况下核心数等於线程数。

    java线程调度

    CPU对于各个线程的调度是随机的(分时调度),在Java程序中,JVM负责线程的调度。 线程调度是指按照特定的机制为多个线程分配CPU的使用权,也就是实际执行的时候是线程,因此CPU调度的最小单位是线程,而资源分配的最小单位是进程。

    JVM调度的模式有两种:分时调度抢占式调度。

    分时调度 是所有线程轮流获得CPU使用权,并平均分配每个线程占用CPU的时间;

    抢占式调度 是根据线程的优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。既然是抢占调度,那么我们就能通过设置优先级来“有限”的控制线程的运行顺序,注意“有限”一次。

    CPU核数 跟多线程 的关系

      要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键的几点:

    a)进程之间是 相互独立的,不共享 内存和数据,线程之间 的内存和数据是 公用的,每个线程只有自己的一组CPU指令、寄存器和堆栈,对于线程来说只有CPU里的东西是自己独享的,程序中的其他东西都是跟同一个进程里的其他线程共享的。

    b)操作系统创建进程时要分配好多外部资源,所以开销大。(这个跟操作系统有关,有人做过实验,window创建进程的开销大,Linux创建进程的开销就很小。)

    再来说一下CPU,过去单CPU时代最先是单任务阶段 在一个时间点 只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。而现在多核CPU的情况下,同一时间点可以执行多个任务(并行),具体到这个任务在CPU哪个核上运行,这个就跟操作系统和CPU本身的设计相关了。

    我们假设一个极端的情况:在一台单核计算机上只运行2个程序,一个是我们的程序A,另一个是操作系统的程序B,每个程序是一个进程。单核CPU的时候,A和B在CPU上交替运行,具体的分配方式由操作系统来判断,我这里猜测应该跟A和B的线程数有关,因为线程是CPU级别的,如果A有5个线程,B也有5个线程,那么CPU分配给A和B的时间应该是1:1的;如果A增加到15个线程,CPU分配给A和B的时间应该是3:1的比例。所以此时如果A的线程数多,那么获得的CPU执行次数就多,处理的速度也就快了。以上假设的前提是:①A和B的优先级相同,②A和B都是只消耗CPU资源的程序。

    如果相同的情况用一个双核的计算机来处理又会是什么结果呢?假设这个双核的计算机和操作系统比较傻,把A进程分配到核1上,B进程分配到核2上,那不管A有几个线程,都是用核1来处理,那么时间肯定是一样的。不过现实中应该不会有这么傻的CPU和操作系统吧。所以赶紧还是会根据线程来进行处理,当A的线程比B多时,会占用核2来处理A的线程。

    刚才说的是只消耗CPU资源的程序,但这样的程序在实际应用中基本上是没有的,总会有跟资源打交道的。比如读个文件,查个数据库,访问一个网络连接等等。这个时候多线程才真正体现出优势,在一个进程中,线程a去读文件,线程b去查数据库,线程c去访问网络,a先用一下CPU,然后去读文件,此时CPU空闲,b就用一下,然后去查数据库,……,相对于读文件、查数据库、访问网络来说CPU计算的时间几乎可以忽略不计,所以多线程实际上是计算机多种资源的并行运用,跟CPU有几个核心是没什么关系的。

     

    https://my.oschina.net/xiaotian120/blog/196201 (java线程调度)
    http://blog.csdn.net/ziwen00/article/details/38097297(这篇写的也不错)

    原文参考:https://blog.csdn.net/qq_33530388/article/details/62448212

    更多相关内容
  • CPU核心数越多,云服务器多线程能力越强,可以处理的信息就越多。CPU如何影响云服务器上挂着的应用?同时对CPU发出多个请求时,请求将按顺序排队并处理。在处理下一个请求之前,每个请求都将收到一小部分处理时间...

    什么是CPU?

    您的网站或APP所在的云服务器有一个或多个中央处理单元(CPU),就像您的家用PC一样。这些基本上是计算机的大脑,处理信息请求和执行程序。CPU核心数越多,云服务器多线程能力越强,可以处理的信息就越多。

    f15c1991e0b74752784752c97aef5f07.png

    CPU如何影响云服务器上挂着的应用?

    当同时对CPU发出多个请求时,请求将按顺序排队并处理。在处理下一个请求之前,每个请求都将收到一小部分处理时间,就像您在家用计算机上运行多个进程一样。

    这种“时间切片”确保每个进程的处理速度相对较快,而不是某些进程比其他进程更长。对于小负载,这不会降低性能,因为CPU可以处理多个请求。

    但是,当系统被超额订阅时,并且一个或两个站点或者应用经历典型的重负载例如DDoS,导致过多的CPU处理请求,则位于同一服务器上的其他网站可能会遭受性能损失。

    这可能是由于网站或者应用流量意外繁重就像受到DDoS攻击就会产生这样的现象,或者由于云服务器端CPU核心数量不够以及缓存不足造成的。

    如果您想挑选合适自己的云服务器,又苦于没有好的文章介绍了解的时候,可以阅读《云服务器配置从入门到精通,从此配置不求人》。

    abeb27ff8ea444532dc301e20c7b6e2a.png

    对于云服务器CPU了解了,我们同时也可以了解一些其它配置与云服务器性能的相关性

    1、内存是数据的中转站,也是决定网站打开速度的重要因素,内存越大,可用缓存越大,打开速度也就越快。根据你网站的规模选择合适配置的空间,假如是一般的个人博客,或者企业展示网站类,就可以选小一点的,若是商城类,新闻类就要相对大一点的空间。

    2、硬盘是存储数据的地方,硬盘的大小要根据网站的数据大小决定,在选择时应该考虑到剩余空间。另外硬盘的I/O读取速度直接决定文件读取的快慢,云服务器硬盘的读取速度比其他网站快很多,一般情况下都够用。

    3、根据网站的性质选择合适的带宽,看你的网站类型、结构和访问量等指标或者预计,一般新的网站,图片不多,也做了处理的,有2M足够了。带宽只要真实,不用多,够用,合适就好;或者,先选择2M,不够再加,这样比较稳妥。如果是普通的网站。比如文字网站,图片网站,论坛等,占用的带宽非常小。5000的访问量可能也占用不到2M的带宽.如果是视频,下载等为主的网站。可能几百个人同时在线都需要占用10M以上的带宽。

    4、操作系统的选择和个人的熟悉情况和网站具体情况有关,对哪种操作系统比较了解就选择哪种操作系统,另外windows系统对asp程序支持较好,不过占用内存较多,而Linux系统对php程序比较友好,更省内存,并且有的程序可能只支持某个操作系统。

    5、线路的选择也是一个很纠结的问题。如果我们是针对于本地用户,那么我们本来可以选择单线路的服务器,但是双线服务器的优势一般在于双IP,并且对于一个城市来说,宽带有电信、网通不同的。就拿大连这个城市来说,虽然处于北方,但是电信的用户也十分多,所以这个时候果断选择双线可能是更好实现用户体验的好方法。

    6、地区,即云服务器所在地区,最好选择在你目标用户所在的区域内,这样网站等打开速度更快。不管是云服务器还是独立服务器,在我们预算一定的情况下,如何选择需要取决于具体的应用。如高计算需求,则优先内存CPU;高访问需求,则优先带宽内存等等。

    展开全文
  • 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级。CPU从早期的单核,发展到现在的双核,多核。CPU除了核心数之外,还有线程数之说,下面就来解释一下CPU核心数与线程数的关系和...

    我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级。CPU从早期的单核,发展到现在的双核,多核。CPU除了核心数之外,还有线程数之说,下面就来解释一下CPU的核心数与线程数的关系和区别。

    CPU核心

    核心(Die)又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有科学的布局。

    CPU多线程

    SMT可通过复制处理器上的结构状态,让同一个处理器上的多个线程同步执行并共享处理器的执行资源,可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。当没有多个线程可用时,SMT处理器几乎和传统的宽发射超标量处理器一样。

    CPU核数和线程数哪个重要

    处理器的核心数一般指的就是物理核心数,也称之为内核,双核就是包括2个独立的CPU核心单元组,而四核就是包括4个独立的CPU核心单元组,是处理各种数据的中心计算单元,多核心的处理器能够有效进步CPU的多任务功能,或者说减少CPU的占用率,进步计算功率。

    一般一个核心对应了一个线程,而intel开发出了超线程技术,1个核心能够做到2个线程计算,而6个核心则能够做到12个线程,超线程技术的好处就是无需增加物理核心就可以明显的进步CPU多线程功能,毕竟增加物理核心是需要占据非常大的核心面积,成本也随之增加。而线程数是一种逻辑的概念,说白了就是虚拟出的CPU核心数,现在无论是intel还是AMD都具备超线程技术。

    CPU核数和线程数有什么作用

    一、游戏用途

    如果您买电脑的用途主要是玩游戏,游戏主要是依靠显卡。由于游戏需要的是最简单粗暴的计算工作,游戏方面对多核心有些无用武之地。目前的主流游戏基本都是双核心调用,四核或者更多核心的比较少,因此多核心的CPU在玩游戏时基本核心处于半闲置状态,利用率较低,不妨考虑一些高主频CPU,单核性能更强,电脑速度更快。如果是游戏或者软件多开,那么多核的优势就显露出来了。

    二、设计:渲染/建模用途

    之前装机之家为大家科普过,一般专业3D建模的话,显卡才是重中之重,优先选择丽台的图形专业卡。而视频渲染、3D渲染主要看重的是CPU的核心数量,多核心多线程并行处理,则显得十分重要,并需要CPU更快更大的缓存来暂存海量的运算数据,这个时候CPU频率反而是其次的。

    如何查看CPU核数和线程数

    我们在设备管理下查看的CPU是核数+线程数总和,所以如果想要查看具体几个核心几个线程,我们还可以使用其它的方法来查看。以Win10系统为例,我们将鼠标指针移动至任务栏空白处并右键之后选择“任务管理器”,如下图所示。

    总结

    一般来说,CPU选择主频高还是多核,最关键就是看个人需求,如果您预算充裕的话,选择一些多核心、高主频的高端处理器无疑是最佳的,不过需要下血本。但是绝大多数装机选购CPU都会优先考虑预算,所以搭配CPU还是需要以您的用途出发。

    展开全文
  • CPU核心,进程、线程,串行、并发、并行

    注意看修饰词。

    1、计算机硬件基本组成

    一个计算机(冯·诺依曼结构)【主要】硬件组成:

    • 主板:是“交通枢纽”,各个部件工作的所在平台,它负责将各个部件紧密连接在一起,各部件通过主板进行数据传输
    • CPU:中央处理器(Central Processing Unit),决定电脑的性能等级。主要有3大组成部分
      • 运算器:算术逻辑运算单元(ALU,Arithmetic Logic Unit),负责执行所有的数学和逻辑工作
      • 控制器:控制单元(CU,Control Unit),控制计算机的所有其他部件,如输入输出设备以及存储器
      • 寄存器:存储单元,包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方
    • 内存:将输入设备接收到的信息以二进制的数据形式存到存储器中
      • RAM
      • ROM
      • CMOS
    • 外存:辅助存储器,像硬盘等,能长期保存信息
    • 显卡、网卡、声卡、电源、键盘、鼠标、显示器等
      在这里插入图片描述

    win10下观察其内存动态使用图:
    在这里插入图片描述
    CPU是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令、处理计算机软件中的数据。
    在这里插入图片描述
    CPU工作原理图:
    在这里插入图片描述

    windows10下 CPU动态使用图:
    在这里插入图片描述
    上述这款CPU的 构造:
    在这里插入图片描述
    这就是我们购买电脑时,所看到的CPU参数:该电脑拥有1个CPU,它有4个内核(表示有4个相对独立的CPU核心单元组,这是物理概念)

    上述这个CPU可描述为:单CPU 4核心 4线程。4核 指的是物理核心(物理概念)。4线程(线程数是一个逻辑概念)。

    上述这个CPU不支持 超线程技术。超线程技术、虚拟化技术 是两个不同的东西。

    也可以通过cmd,wmiccpu get查看:

    • NumberOfCores:表示CPU核心数
    • NumberOfLogicalProcessors:表示CPU线程数

    多核 是指一个CPU有多个核心处理器,处理器之间通过CPU内部总线进行通讯。

    多CPU是指简单的多个CPU工作在同一个系统上,多个CPU之间的通讯是通过主板上的总线进行的。

    在这里插入图片描述

    参考文章:
    CPU个数,核心数,线程数

    2、进程(process)、线程(thread)

    在这里插入图片描述
    注意下方语句中的 主体:操作系统、CPU

    进程:操作系统(OS)进行资源(CPU、内存、磁盘、IO、带宽等)分配的最小单位;

    是OS对正在运行的程序的一种抽象,是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成。

    打开一个浏览器、一个聊天窗口分别是一个进程。进程可以有多个子任务,如聊天工具接收消息、发送消息,这些子任务是线程。
    资源分配给进程,线程共享进程资源。

    线程:CPU调度和分配的基本单位。
    一个进程可由多个线程的执行单元组成,每个线程都运行在同一进程的上下文中,共享同样的代码和全局数据。
    每个进程至少有一个主执行线程,它无需由用户主动创建,一般由系统自动创建。系统创建好进程后,实际上就启动了执行该进程的执行主线程,执行主线程以函数地址形式,即程序入口函数(如 main函数),将程序的启动点提供给操作系统。主执行线程终止了,进程也就随之终止。

    线程数 是一种逻辑概念,是模拟出的CPU核心数。

    进程和线程的关系:进程可以简单理解为一个容器,有自己独立的地址空间,其内部的各个线程共享该地址空间。
    其实严格讲应该是线程能够获得CPU资源,进程对CPU资源的获取也是体现在线程上的。至于CPU内核数,和进程线程没直接关系。操作系统(OS)可以把某个进程部署在某个CPU核上,当然这要取决于系统设计。

    线程是CPU调度和分配的最小单位,操作系统会根据进程的优先级和线程的优先级去调度CPU。一个计算机可以并发(同时)的线程数,等于计算机上的逻辑处理器的个数(CPU个数 *每个CPU核心数 *每个内核线程数)。

    进程、线程是操作系统调度的,进程本身不会负责调度线程。在操作系统看来,线程和进程其实差不多,不同点是线程是迷你的进程,并且进程可以包含多个线程。

    对比进程线程
    定义进程是程序运行的一个实体的运行过程,是系统进行资源分配和调配的一个独立单位线程是进程运行和执行的最小调度单位
    系统开销创建撤销切换开销大,资源要重新分配和收回仅保存少量寄存器的内容,开销小,在进程的地址空间执行代码
    拥有资产资源拥有的基本单位基本上不占资源,仅有不可少的资源(程序计数器,一组寄存器和栈)
    调度资源分配的基本单位独立调度分配的单位
    安全性进程间相互独立,互不影响线程共享一个进程下面的资源,可以互相通信和影响
    地址空间系统赋予的独立的内存地址空间由相关堆栈寄存器和和线程控制表TCB组成,寄存器可被用来存储线程内的局部变量

    线程切换

    • CPU给线程分配时间片(也就是分配给线程的时间),执行完时间片后会切换都另一个线程。

    • 切换之前会保存线程的状态,下次时间片再给这个线程时才能知道当前状态。

    • 从保存线程A的状态再到切换到线程B时,重新加载线程B的状态的这个过程就叫上下文切换

    • 而上下切换时会消耗大量的CPU时间。

    线程开销

    • 上下文切换消耗
    • 线程创建和消亡的开销
    • 线程需要保存维持线程本地栈,会消耗内存

    程序与进程、线程的关系

    程序 只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态的实体。
    而进程则不同,它是程序在某个数据集上的执行(即 进程是程序的一次执行),是一个动态的实体,有自己的生命周期,因创建而产生、因调度而运行、因等待资源或事件而被处于等待状态、因任务完成而被撤销,反映的是一个程序在一定的数据集上运行的全部动态过程。

    进程和程序并不是一一对应的:一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程。这是程序无法做到的,因为程序没有和数据产生直接的联系,即使是执行不同的数据的程序,但它们的指令的集合依然是一样的,因此无法唯一地标识出这些运行在不同数据集上的程序。
    一般来说,一个进程肯定有一个与之对应的程序,而且只有一个。而一个程序有可能没有与之对应的进程(因为它没有执行)、也可能有多个进程与之对应(运行在不同的数据集上)。

    不同的进程可以执行同一段程序,比如读取同一个文件数据,它们的读取函数的代码是相同的,并被2个进程或线程运行了。

    一般情况下,写一个程序,没有单独开线程,那么默认这个程序的一次运行就是一个单进程;而如果调用了fork,这时将会有2个进程,调用thread,则这个进程就会有2个线程。

    进程是一个实体,每一个进程都有它自己的内存地址段(heap、stack等),进程是执行中的程序。

    程序是一个没有生命的实体,只有处理器赋予程序生命时,才能成为一个活动的实体。

    线程,程序执行的最小单元,每个程序都至少有一个线程,若程序只有一个线程,那就是它程序本身。单线程的进程可以简单地理解为只有一个线程的进程。一个进程在同一时间只做一件事,但有了多线程后,一个进程同一时间可以做多件事,每个线程可以处理不同的事务。无论系统有几个CPU,其实进程运行在单CPU上,多线程也可以是进程并发处理多个事务。一个线程阻塞不会影响另一个线程。

    多线程的进程可以尽可能地利用系统CPU资源,但也不是线程越多越好,线程越多,CPU分配给每个线程的时间就越少。

    线程 包含了表示进程内执行环节所必需的信息:标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量、线程私有数据。
    对于内存而言,堆内存、代码区一般属于一个进程,但是栈却是属于一个线程的,且每个线程拥有一个独立的栈。
    errno也是属于单个线程的,每个线程中的errno是独立的。
    进程内所有信息对于线程是共享的,包括执行代码、全局变量、堆内存、栈、文件描述符。

    总结:
    进程和线程都是一个时间段的描述,是CPU工作时间段的描述:

    • 进程就是上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文
    • 线程是共享了进程的上下文环境,的更为细小的CPU时间段。

    3、串行、并发、并行

    这些概念对于进程、线程都适用。

    3.1、串行

    多个任务,执行时一个执行完再执行另一个。

    3.2、并发(concurrency)

    多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。

    即一个指令 和另一个指令交错执行,操作系统实现这种交错执行的机制称为:上下文切换。上下文是指操作系统保持跟踪进程或线程运行所需的所有状态信息,如寄存器文件的当前值、主存内容等

    3.3、并行(parallelism)

    每个线程分配给独立的核心,线程同时运行。

    单核CPU多个进程或多个线程内能实现并发(微观上的串行,宏观上的并行);多核CPU线程间可以实现微观上并行。

    总结:
    1、单CPU中进程只能是并发,多CPU计算机中进程可以并行。
    2、单CPU单核中线程只能并发,单CPU多核中线程可以并行。
    3、无论是并发还是并行,使用者来看,看到的是多进程,多线程。

    4、CPU处理程序

    4.1、单核CPU处理程序

    在单CPU计算机中,有一个资源是无法被多个程序并行使用的:CPU。

    单进程多线程处理:

    在一个程序里,有两个功能:听歌、发送消息,这就是单进程2线程。如果听歌线程获取了锁,那么这个线程将获取CPU的运行时间,其他线程将被阻塞。但CPU始终处于运行状态,影响计算时间的其实只是加锁、解锁的时间,并不会发生CPU空闲的现象,CPU利用率100%。

    线程阻塞:一般是被动的,在抢占资源中得不到资源,被动的挂起在内存,等待某种资源或信号将它唤醒。(释放CPU,不释放内存)

    多进程处理:
    将听歌、发消息分别写出两个独立的程序,独立运行,与上面不同的是,如果进程间需要通信,比如交换数据,则会需要很多步骤,效率低。

    4.2、多核CPU处理程序

    单进程多线程处理:线程可以跨核处理,进程之间则不能,如同支付宝不能访问QQ一样(安全性)。
    跟单核对比:如果A核处理听歌线程阻塞,B核空闲,则CPU工作效率下降一半;没有阻塞时,QQ的A线程听歌、B线程发消息,多核CPU效率比单核快很多。

    多进程多线程处理:不同的程序,不可能一个进程融合QQ、支付宝、浏览器等

    多核下线程数量选择

    • 计算密集型
      程序主要为复杂的逻辑判断和复杂的运算。
      CPU的利用率高,不用开太多的线程,开太多线程反而会因为线程切换时切换上下文而浪费资源。

    • IO密集型
      程序主要为IO操作,比如磁盘IO(读取文件)和网络IO(网络请求)。
      因为IO操作会阻塞线程,CPU利用率不高,可以开多点线程,阻塞时可以切换到其他就绪线程,提高CPU利用率。

    总结:

    • 提高性能的一种方式:提高硬件水平,处理速度或核心数。
    • 另一种方式:根据实际场景,合理设置线程数,软件上提高CPU利用率。

    进程:处理任务多,每个进程都有独立的内存单元,占用CPU资源相对较少。缺点是 进程间切换开销大。进程之间通信就如同两个程序之间的通信。

    线程:处理任务相对较少,同时为了处理【并发】,多个线程共享内存单元,占用资源少。线程之间的通信就如同一个程序里的两个函数间通信,在函数里定义一个全局变量,两个线程(两个函数)都能用,线程间共享内存。

    展开全文
  • CPU闲着的时候在干什么? Gustavo Duarte写的一篇详细文章指出,CPU空闲时并不是什么都不干,而是在运行空闲任务(idle tasks)。 CPU整体设计就是完成当前操作后尽可能快速地返回到空闲状态,但系统必须要有某种方法/...
  • 在Java中,通过下面的代码,我们可以很容易地获取到系统可用的处理器核心数目: 1 Runtime.getRuntime().availableProcessors(); 基本原则是:应用程序的最小线程数应该等于可用的处理器核数。...
  •  E9000 CPU核心在PMC-Sierra公司生产的种类繁多且不断增加的MIPS微处理器中处于重要的地位。E9000 CPU核心可用于两种类型的部件中。    第一种部件是独立式处理器。这种处理器为所有内嵌系统的设计者所熟悉。在...
  • 现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。 传统的 8259A 只适合单 CPU 的情况...
  • CGroup是一种资源隔离方案 CGroup提供了一些子系统: cpu: 可以限制使用CPU权限。 memory: 可以限制内存使用量 blockio: 限制I/O速率 cpuset: 基于CPU核心进行限制(限制可以使用哪些核) cpuacct: 记录...
  • freqtop用于在Linux下监视CPU频率缩放的监视器。 简介freqtop工具将显示系统中的所有逻辑核心,其中带有rep freqtop栏,用于监控Linux下的CPU频率缩放。...位于底部时,核心完全处于空闲状态。 按键按ESCAPE停止频率
  • CPU 性能测试

    千次阅读 2021-09-18 12:18:29
    1、在第一个终端输入以下命令:stress --cpu 1 --timeout 600 stress命令使用详解 2、在第二个终端输入watch -d uptime 实时查看平均负载变化情况: watch命令使用详解 3、在第三个终端运行mpstat查看CPU...
  • ARM架构与CPU

    千次阅读 2021-02-19 14:16:52
    首先介绍两大主流CPU架构——ARM和x86的构造,然后从性能、扩展能力、操作系统的兼容性、软件开发的方便性及可使用工具的多样性及功耗这五个方面进行对比,扩展介绍RISC精简指令集。介绍CPU参数解读和概念辨析。最后...
  • 电脑cpu多少容量

    千次阅读 2021-07-26 02:21:42
    CPU作为电脑的核心组成部份,它的好坏直接影响到电脑的性能。下面是小编带来的关于电脑cpu多少容量的内容,欢迎阅读!电脑cpu多少容量:在这先说一下CPU含义:中央处理器(CPU,Central Processing Unit)是一块超大...
  • 计算机的核心是什么

    千次阅读 2021-07-28 04:44:24
    计算机的核心,电脑核心是中央处理器,简称CPU,是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心(Control Unit)。功能主要是解释计算机指令以及处理计算机软件中的数据。电脑核心是中央处理器,...
  • CPU负载均衡

    千次阅读 2019-02-28 19:37:36
    (1)一个进程要加入runqueue时,选择负载最轻的cpu上的runqueue (2)当前CPU的runqueue为空时,主动拉取其他runqueue上的进程来运行 (3)周期计算各个CPU上的负载情况,在必要的时候迁移进程 具体的场景,CFS...
  • 1分钟搞懂 CPU该买多核还是高主频?

    千次阅读 2020-12-22 11:43:57
    小伙伴周末的留言里有几个人一直问买什么CPU合适。如果仅仅是单纯看钱,那小编的回答肯定是在你经济承受范围内最贵的那个最合适。不过呢,因为大家的需求各不相同,CPU可真不是靠钱衡量就可以的,今天小编就针对大家...
  • CPU中文名称为中央处理器典型代表为英特尔8086处理器现在的奔腾X处理器都是8086的直系后代处理器顾名思义其功能是处理数据对于中央处理器就是在数据处理中处于核心地位的处理器听起来似乎很复杂但实际上核心就是一...
  • CPU C-state & cpuidle driver

    千次阅读 2020-07-15 15:14:12
    C-state是intel CPU处于空闲时的一种状态,CPU有几种电源模式,它们统称为“c状态”或“c模式” 低功耗模式最初是在486DX4处理器中引入的。到目前为止,已经引入了更多的功耗模式,并且对每种模式进行了增强,以使...
  • cpu有两种状态: ...而处于核心态执行中的进程,能访问所有的内存空间和对象,且所占用的处理机是不允许被抢占的。 2.非特权指令:cpu在用户态时运行的指令 处于用户态执行时,进程所能访问的内存
  • CPUFreq简介

    千次阅读 2021-07-10 00:41:20
    现在我们在购买一款手机的时候,大家都会去看一下这款手机所采用的芯片型号,有几个CPU核心(是8核处理器还是4核处理器),CPU的主频最高是多少。这些都是一些关系到性能体验的初步的硬件基础参...
  •  也就是说,多核心CPU在玩游戏的时候很多核心处于半闲置状态,利用率并不高,因此如果是玩游戏,一般双核够用,预算有限的话,不妨优先考虑一些高主频CPU,这样单核更强,游戏方面更具优势。当然,如果是...
  • 文章目录基本理解cpufreq深入探究cpufreq2.... cpufreq notifiers核心(core)架构与API1. CPUFreq子系统的初始化2. 注册cpufreq_governor3. 注册一个cpufreq_driver驱动4. 为每个cpu建立频率调整策略(p...
  • 性能优化之CPU占用率高(一)

    千次阅读 2020-07-30 12:04:24
    我们cpu使用率高的情况下会出现什么情况? 我们访问程序的速度比较... sysTime:CPU处于用户模式和内核模式的时间总和 2.与CPU使用率有关的是什么? 人们常说,计算密集型程序的CPU密集程度更高。 那么,JAVA应用
  • CPU 使用率反映的是当前 CPU 的繁忙程度,忽高忽低的原因在于占用 CPU 处理时间的进程可能处于 IO 等待状态但却还未释放进入wait。 平均负载(load average)是指某段时间内占用 CPU 时间的进程和等待 CPU 时间的...
  • 最完整的Android CPU模式设置和功能

    千次阅读 2021-01-12 06:27:50
    Android的CPU频率不是...但是,如果您刷新了Viper等第三方ROM,或者您的手机已经处于ROOT状态,则可以安装CPU管理程序对其进行设置请在下面查看每个选项的详细功能[按需]按需模式:→根据需要调整CPU频率。不操作手...
  • 最近研究linux时接触到了一个新的概念,叫做CPU的平均负载(load average)。之前都只听说过CPU的使用情况,很少听说过负载情况。于是对这个概念进行了一下研究学习,总结如下,以便日后查阅。
  • Android/Linux系统性能分析之-CPU

    千次阅读 2022-02-24 14:10:28
    需求的CPU资源超过了系统力所能及的范围时,进程里的线程(或者任务)将会排队,等待轮候自己运行的机会。等待给应用程序的运行带来严重延时,使得性能下降。 我们可以通过仔细检查CPU的用量来寻找性能改进的空间,...
  • 中央处理器(CPU),是电子计算机中的核心配件,相当于人的大脑,人的大脑可以控制人的身体,而计算机的大脑CPU可以控制计算机。CPU的功能主要是解释计算机指令以及处理计算机软件中的数据。我们打开任务管理器,就会...
  • CPU虚拟化

    千次阅读 2022-03-19 16:59:25
    核心由Qemu和KVM两部分组成,Qemu本身是一个独立的虚拟机 软件,运行在OS的用户态;KVM是Linux的内核模块,利用CPU 硬件虚拟化特性对CPU和内存虚拟化进行加速 – Libvirt是对KVM虚拟机进行管理的工具和应用编程...
  • Linux CPU Idle Time Management

    千次阅读 2019-01-04 00:14:24
    CPU Idle Time Management Copyright © 2018 Intel Corp., Rafael J. Wysocki rafael.j.wysocki@intel.com 文章目录CPU Idle Time ManagementConceptsLogical CPUsIdle CPUsThe Idle LoopIdle CPUs and The ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 121,717
精华内容 48,686
关键字:

当cpu处于核心