精华内容
下载资源
问答
  • CPU时间片

    万次阅读 多人点赞 2016-01-26 22:24:34
    CPU时间片 //百度  时间片_百度百科   时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程...

    CPU时间片

    //百度  

    时间片_百度百科

      

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

    举例

    你同时输入两篇文档:A.txt和B.txt;
    你在A中输入一个字之后,再在B中输入一个字,轮流输入,直至完成。总的看来你似乎在同时进行两篇文章的录入,你可以说我一边写A一边写B。但是具体到某个字时,就是沿着时间的前进,AB交替进行了。而你每个字输入所占用的这段时间,我们就可以称之为时间片。

    操作系统

    嵌入式操作系统可以分为实时操作系统和分时操作系统两类

    实时

    实时操作系统是指具有实时性,能支持实时控制系统工作的操作系统。实时操作系统的首要任务是调度一切可利用的资源完成实时控制任务;其次才着眼于提高计算机系统的使用效率,其重要特点是通过任务调度来满足对于重要事件在规定的时间内做出正确的响应。实时操作系统与分时操作系统有着明显的区别。具体地说,对于分时操作系统,软件的执行在时间上的要求并不严格,时间上的延误或者时序上的错误,一般不会造成灾难性的后果。而对于实时操作系统,主要任务是对事件进行实时的处理,虽然事件可能在无法预知的时刻到达,但是软件必须在事件随机发生时,在严格的时限内做出响应(系统的响应时间)。即使是系统处在尖峰负荷下,也应如此,系统时间响应的超时就意味着致命的失败。另外,实时操作系统的重要特点是具有系统的可确定性,即系统能对运行的最好和最坏情况做出精确的估计。

    分时

    分时操作系统是把CPU的时间划分成长短基本相同的时间区间,即"时间片",通过操作系统的管理,把这些时间片依次轮流地分配给各个用户使用.如果某个作业在时间片结束之前,整个任务还没有完成,那么该作业就被暂停下来,放弃CPU,等待下一轮循环再继续做.此时CPU又分配给另一个作业去使用.由于计算机的处理速度很快,只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片,中间有所"停顿";但用户察觉不出来,好像整个系统全由它"独占"似的.


    为了提高程序执行效率,大家在很多应用中都采用了多线程模式,这样可以将原来的序列化执行变为并行执行,任务的分解以及并行执行能够极大地提高程序的运行效率。但这都是代码级别的表现,而硬件是如何支持的呢?那就要靠CPU的时间片模式来说明这一切。程序的任何指令的执行往往都会要竞争CPU这个最宝贵的资源,不论你的程序分成了多少个线程去执行不同的任务,他们都必须排队等待获取这个资源来计算和处理命令。先看看单CPU的情况。下面两图描述了时间片模式和非时间片模式下的线程执行的情况:


    1非时间片线程执行情况


    2时间片线程执行情况

    在图一中可以看到,任何线程如果都排队等待CPU资源的获取,那么所谓的多线程就没有任何实际意义。图二中的CPU Manager只是我虚拟的一个角色,由它来分配和管理CPU的使用状况,此时多线程将会在运行过程中都有机会得到CPU资源,也真正实现了在单CPU的情况下实现多线程并行处理。

    CPU的情况只是单CPU的扩展,当所有的CPU都满负荷运作的时候,就会对每一个CPU采用时间片的方式来提高效率。

    Linux的内核处理过程中,每一个进程默认会有一个固定的时间片来执行命令(默认为1/100秒),这段时间内进程被分配到CPU,然后独占使用。如果使用完,同时未到时间片的规定时间,那么就主动放弃CPU的占用,如果到时间片尚未完成工作,那么CPU的使用权也会被收回,进程将会被中断挂起等待下一个时间片。

    CPU利用率和Load Average的区别

    压力测试不仅需要对业务场景的并发用户等压力参数作模拟,同时也需要在压力测试过程中随时关注机器的性能情况,来确保压力测试的有效性。当服务器长期处于一种超负荷的情况下运行,所能接收的压力并不是我们所认为的可接受的压力。就好比项目经理在给一个人估工作量的时候,每天都让这个人工作12个小时,那么所制定的项目计划就不是一个合理的计划,那个人迟早会垮掉,而影响整体的项目进度。

    CPU利用率在过去常常被我们这些外行认为是判断机器是否已经到了满负荷的一个标准,看到50%-60%的使用率就认为机器就已经压到了临界了。CPU利用率,顾名思义就是对于CPU的使用状况,这是对一个时间段内CPU使用状况的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况,如果被占用时间很高,那么就需要考虑CPU是否已经处于超负荷运作,长期超负荷运作对于机器本身来说是一种损害,因此必须将CPU的利用率控制在一定的比例下,以保证机器的正常运作。

    Load AverageCPULoad,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。为什么要统计这个信息,这个信息的对于压力测试的影响究竟是怎么样的,那就通过一个类比来解释CPU利用率和Load Average的区别以及对于压力测试的指导意义。

    我们将CPU就类比为电话亭,每一个进程都是一个需要打电话的人。现在一共有4个电话亭(就好比我们的机器有4核),有10个人需要打电话。现在使用电话的规则是管理员会按照顺序给每一个人轮流分配1分钟的使用电话时间,如果使用者在1分钟内使用完毕,那么可以立刻将电话使用权返还给管理员,如果到了1分钟电话使用者还没有使用完毕,那么需要重新排队,等待再次分配使用。


    3电话使用场景

    上图中对于使用电话的用户又作了一次分类,1min的代表这些使用者占用电话时间小于等于1min2min表示使用者占用电话时间小于等于2min,以此类推。根据电话使用规则,1min的用户只需要得到一次分配即可完成通话,而其他两类用户需要排队两次到三次。

    电话的利用率= sum (active use cpu time)/period

    每一个分配到电话的使用者使用电话时间的总和去除以统计的时间段。这里需要注意的是是使用电话的时间总和(sum(active use cpu time)),这与占用时间的总和(sum(occupy cpu time))是有区别的。(例如一个用户得到了一分钟的使用权,在10秒钟内打了电话,然后去查询号码本花了20秒钟,再用剩下的30秒打了另一个电话,那么占用了电话1分钟,实际只是使用了40秒)

    电话的Average Load体现的是在某一统计时间段内,所有使用电话的人加上等待电话分配的人一个平均统计。

    电话利用率的统计能够反映的是电话被使用的情况,当电话长期处于被使用而没有的到足够的时间休息间歇,那么对于电话硬件来说是一种超负荷的运作,需要调整使用频度。而电话Average Load却从另一个角度来展现对于电话使用状态的描述,Average Load越高说明对于电话资源的竞争越激烈,电话资源比较短缺。对于资源的申请和维护其实也是需要很大的成本,所以在这种高Average Load的情况下电话资源的长期“热竞争”也是对于硬件的一种损害。

    低利用率的情况下是否会有高Load Average的情况产生呢?理解占有时间和使用时间就可以知道,当分配时间片以后,是否使用完全取决于使用者,因此完全可能出现低利用率高Load Average的情况。由此来看,仅仅从CPU的使用率来判断CPU是否处于一种超负荷的工作状态还是不够的,必须结合Load Average来全局的看CPU的使用情况和申请情况。

    所以回过头来再看测试部对于Load Average的要求,在我们机器为8CPU的情况下,控制在10 Load左右,也就是每一个CPU正在处理一个请求,同时还有2个在等待处理。看了看网上很多人的介绍一般来说Load简单的计算就是2* CPU个数减去1-2左右(这个只是网上看来的,未必是一个标准)。

    补充几点:

    1.对于CPU利用率和CPU Load Average的结果来判断性能问题。首先低CPU利用率不表明CPU不是瓶颈,竞争CPU的队列长期保持较长也是CPU超负荷的一种表现。对于应用来说可能会去花时间在I/O,Socket等方面,那么可以考虑是否后这些硬件的速度影响了整体的效率。

    这里最好的样板范例就是我在测试中发现的一个现象:SIP当前在处理过程中,为了提高处理效率,将控制策略以及计数信息都放置在Memcached Cache里面,当我将Memcached Cache配置扩容一倍以后,CPU的利用率以及Load都有所下降,其实也就是在处理任务的过程中,等待Socket的返回对于CPU的竞争也产生了影响。

    2.未来多CPU编程的重要性。现在服务器的CPU都是多CPU了,我们的服务器处理能力已经不再按照摩尔定律来发展。就我上面提到的电话亭场景来看,对于三种不同时间需求的用户来说,采用不同的分配顺序,我们可看到的Load Average就会有不同。假设我们统计Load的时间段为2分钟,如果将电话分配的顺序按照:1min的用户,2min的用户,3min的用户来分配,那么我们的Load Average将会最低,采用其他顺序将会有不同的结果。所以未来的多CPU编程可以更好的提高CPU的利用率,让程序跑的更快。

    以上所提到的内容未必都是很准确或者正确,如果有任何的偏差也请大家指出,可以纠正一些不清楚的概念。

    展开全文
  • Java线程何时放弃CPU时间片

    千次阅读 2020-01-11 11:30:41
    每个线程从启动到结束的过程中可能经历多种状态,多个线程则意味着并发,而并发则涉及CPU的执行时间片。下图是三个线程分配到的CPU执行时间示意图,从启动到结束三个线程除了真正执行阶段,还包含了等待阶段。 执行...

    跟着作者的65节课彻底搞懂Java并发原理专栏,一步步彻底搞懂Java并发原理。

    作者简介:笔名seaboat,擅长工程算法、人工智能算法、自然语言处理、架构、分布式、高并发、大数据和搜索引擎等方面的技术,大多数编程语言都会使用,但更擅长Java、Python和C++。平时喜欢看书、写作和运动,擅长篮球、跑步、游泳、健身和羽毛球等运动项目。崇尚开源,崇尚技术自由,更崇尚思想自由。出版书籍:《Tomcat内核设计剖析》、《图解数据结构与算法》、《人工智能原理科普》。

    线程与CPU执行

    Java中内置支持在一个进程中运行多个线程,线程的执行由JVM进行管理。每个线程从启动到结束的过程中可能经历多种状态,多个线程则意味着并发,而并发则涉及CPU的执行时间片。下图是三个线程分配到的CPU执行时间示意图,从启动到结束三个线程除了真正执行阶段,还包含了等待阶段。

    线程并发执行

    执行时间

    一个线程从启动到结束过程总,有两个时间概念我们要理解。其一是CPU时间,即线程真正执行的时间。其二是总消耗时间,即真正执行的时间加上等待的时间。如下图可以很清晰看到这两者的关系,P1得到了多个CPU执行时间,而总消耗时间则包括P1执行期间CPU分配给其它线程执行的时间,所以总

    展开全文
  • Java线程的CPU时间片

    千次阅读 2018-04-29 10:04:17
    Java中线程会按优先级分配CPU时间片运行,那么线程什么时候放弃CPU的使用权?可以归类成三种情况: 当前运行线程主动放弃CPU,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或者说...

    Java中线程会按优先级分配CPU时间片运行,那么线程什么时候放弃CPU的使用权?可以归类成三种情况:

    1. 当前运行线程主动放弃CPU,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或者说放弃本次时间片的执行权),例如调用yield()方法。

    2. 当前运行线程因为某些原因进入阻塞状态,例如阻塞在I/O上。

    3. 当前运行线程结束,即运行完run()方法里面的任务。

    三种情况中第三种很好理解,任务执行完了自然放弃CPU,前两种情况用两个例子说明,先看使用yield放弃CPU什么情况:

    public class YeildThread {
     public static void main(String[] args) {
         MyThread mt = new MyThread();
         mt.start();
         while (true) {
             System.out.println("主线程");
         }
     }
    }
    class MyThread extends Thread {
     public void run() {
         while (true) {
             System.out.println("被放弃线程");
             Thread.currentThread().yield();
         }
     }
    }

    截取某段输出如下,输出“主线程”比“被放弃线程”运行的机会多,因为mt线程每次循环都把时间片让给主线程,正是因为yield操作并不会永远放弃CPU,仅仅只是放弃了此次时间片,把剩下的时间让给别的线程,

    主线程
    主线程
    主线程
    主线程
    主线程
    主线程
    被放弃线程
    主线程
    主线程
    主线程
    主线程
    主线程
    主线程
    主线程

    第二个例子为节省代码量将使用伪代码表示,例子简单但已能说明问题,运行程序将有两条线程工作,ioThread每次遇到I/O阻塞就放弃当前的时间片,而主线程则按JVM分配的时间片正常运行。

    public class IOBlockThread {
     public static void main(String[] args) {
         IOThread ioThread = new IOThread();
         ioThread.start();
         主线程任务执行
     }
    }
    class IOThread extends Thread {
     public void run() {
         while (true) {
             I/O阻塞
         }
     }
    }

    Java的线程的调度机制都由JVM实现,假如有若干条线程,你想让某些线程拥有更长的执行时间,或某些线程分配少点执行时间,这时就涉及“线程优先级”,Java把线程优先级分成10个级别,线程被创建时如果没有明确声明则使用默认优先级,JVM将根据每个线程的优先级分配执行时间的概率。有三个常量Thread.MIN_PRIORITY、Thread.NORM_PRIORITY、Thread.MAX_PRIORITY分别表示最小优先级值(1)、默认优先级值(5)、最大优先级值(10)。

    由于JVM的实现以宿主操作系统为基础,所以Java优先级值与各种不同操作系统的原生线程优先级必然存在某种映射关系,这样才足以封装所有操作系统的优先级提供统一优先级语义。例如1-10优先级值在linux可能要与0-99优先级值进行映射,而windows系统则有7个优先级要映射。

    线程的调度策略决定上层多线程运行机制,JVM的线程调度器实现了抢占式调度,每条线程执行的时间由它分配管理,它将按照线程优先级的建议对线程执行的时间进行分配,优先级越高,可能得到CPU的时间则越长。

    ————-推荐阅读————

    我的2017文章汇总——机器学习篇

    我的2017文章汇总——Java及中间件

    我的2017文章汇总——深度学习篇

    我的2017文章汇总——JDK源码篇

    我的2017文章汇总——自然语言处理篇

    我的2017文章汇总——Java并发篇


    跟我交流,向我提问:

    这里写图片描述

    公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

    为什么写《Tomcat内核设计剖析》

    欢迎关注:

    这里写图片描述

    展开全文
  • cpu时间片

    千次阅读 2016-09-26 20:48:25
    时间片(timeslice)又称为“量子(quantum)”或“处理器片(processorslice)” 是分时操作系统分配给每个正在运行的进程微观上的一段CPU时间(在抢占内核中是:从进程开始运行直到被抢占的时间)。 现代操作...

    时间片(timeslice)又称为“量子(quantum)”或“处理器片(processorslice)”

    是分时操作系统分配给每个正在运行的进程微观上的一段CPU时间(在抢占内核中是:从进程开始运行直到被抢占的时间)。

    现代操作系统(如:WindowsLinuxMac OS X等)允许同时运行多个进程 —— 例如,你可以在打开音乐播放器听音乐的同时用浏览器浏览网页并下载文件。

    事实上,由于一台计算机通常只有一个CPU,所以永远不可能真正地同时运行多个任务。

    这些进程“看起来像”同时运行的,实则是轮番穿插地运行,由于时间片通常很短(在Linux上为5ms-800ms),用户不会感觉到。


    时间片由操作系统内核的调度程序分配给每个进程。

    首先,内核会给每个进程分配相等的初始时间片,然后每个进程轮番地执行相应的时间,当所有进程都处于时间片耗尽的状态时,

    内核会重新为每个进程计算并分配时间片,如此往复。

    通常状况下,一个系统中所有的进程被分配到的时间片长短并不是相等的,尽管初始时间片基本相等(在Linux系统中,初始时间片也不相等,而是各自父进程的一半),

    系统通过测量进程处于“睡眠”和“正在运行”状态的时间长短来计算每个进程的交互性,交互性和每个进程预设的静态优先级Nice)的叠加即是动态优先级,

    动态优先级按比例缩放就是要分配给那个进程时间片的长短。一般地,为了获得较快的响应速度,

    交互性强的进程(即趋向于IO消耗型)被分配到的时间片要长于交互性弱的(趋向于处理器消耗型)进程。

    展开全文
  • CPU时间片轮换机制

    千次阅读 2020-04-21 21:30:20
    1.cpu时间片轮换机制是什么? cpu时间片轮换机制是一种最古老,简单和公平的算法;又称为RR调度。时间片则是分配给每个进程的一个最大时间段。 2.运行机制有哪些? (1)在某个进程的运行时间达到系统所分配的最大...
  • 但是在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。 二、Task调度 时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法是时间片...
  • 线程,进程,CPU时间片

    千次阅读 2019-09-18 13:21:17
    CPU时间片是直接分配给线程的,线程拿到CPU时间片就能执行了 CPU时间片不是先分给进程然后再由进程分给进程下的线程的。 所有的进程并行,线程并行都是看起来是并行,其实都是CPU片轮换使用。 线程分到了CPU时间片,...
  • Linux设置进程分配CPU时间片上限

    千次阅读 2019-11-29 12:52:59
    要实现linux限制进程上限的功能,需要用到Cgroups技术,它的全程Linux Control Group,用于限制一个进程组能够使用的资源(CPU、内存、磁盘、网络带宽)上限,还能够对进程进行优先级设置,以及进行将进程挂起恢复的...
  • Thread.sleep()关于让不让出cpu时间片

    千次阅读 多人点赞 2019-04-28 17:07:51
    假如Thread.sleep(),不让出cpu时间片,创建1000个线程,每个线程执行sleep()方法。则cpu的使用率一定很高,贴上代码: public static void main(String[] args) { class Worker extends Thread { public void ...
  • 了解一下CPU时间片轮转机制原理

    千次阅读 2020-06-30 12:10:21
    系统会维护一张就绪进程列表,其实就是一个先进先出的队列,新来的进程就会被加到队列的末尾,然后每次执行进程调度的时候,都会选择队列的队首进程,让它在CPU上运行一个时间片的时间,不过如果分配的时间片已经...
  • CPU 时间片轮转机制 (RR 调度)

    千次阅读 2020-04-06 09:24:27
    每当执行进程调度时,进程调度程序总是选出就绪队列的队首进程,让它在 CPU 上运行一个时间片的时间。时间片是一个小的时间单位,通常为 10~100ms 数量级。当进程用完分给它的时间片后,系统的计时器...
  • 每当执行进程调度时,进程调度程序总是选出就绪队列的队首进程,让它在CPU上运行一个时间片的时间。时间片是一个小的时间单位,通常为10~100ms数量级。当进程用完分给它的时间片后,系统的计时器发出时钟中断,调度...
  • CPU时间片轮转机制(RR调度)

    千次阅读 2019-01-01 14:34:24
    时间片轮转机制(RR调度)时间片轮转法(Round-Robin,RR)主要用于分时...每当执行进程调度时,进程调度程序总是选出就绪队列的队首进程,让它在CPU上运行一个时间片的时间。时间片是一个小的时间单位,通常为10~100m...
  • SetCpuTimeSlice,自制工具,可以设置Windows下CPU精度1~16ms,用于提高CPU的调度频率。
  • 性能测试指标之CPU时间片

    千次阅读 2016-03-11 11:03:16
    通过top命令我们可以看到cpu有时间片有如下8项目 us:用户态使用的cpu时间比,最容易关注到的时间,常常嘴巴挂着的cpu利用率 sy:系统态使用的cpu时间比,系统进程所耗时间 ni:用做nice加权的进程...
  • 1. 当前运行线程主动放弃cpu,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或者说放弃本次时间片的执行权),例如调用yield()方法2. 当前运行线程因为某些原因进入阻塞状态,例如阻塞在...
  • 内核在微观上,把CPU的运行时间分成许多分,然后安排给各个进程轮流运行,造成宏观上所有的进程仿佛同时在执行。双核CPU,实际上最多只能有两个进程在同时运行,大家在top、vmstat命令里看到的正在运行的进程,并不...
  • 错误的CPU时间片大小概念

    万次阅读 热门讨论 2012-08-08 15:35:15
    误导各位大侠了。原文已删除。
  • 【操作系统】CPU中的时间片的概念

    万次阅读 多人点赞 2018-05-31 19:47:49
    时间片CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。...
  • 关于CPU时间片轮询的一点发现

    千次阅读 2009-06-24 18:09:00
    今天试验PHP CLI模式时发现一个有趣的现象:由于CLI模式没有最大执行时间的限制,我写了一个while(1)...我想这应该是linux内核对CPU时间片轮询机制造成的,具体情况还没有去仔细想(该复习操作系统原理了-_-!)。后
  • 并发,cpu时间片轮转,原子操作

    千次阅读 2017-05-27 17:17:25
    突然想到一个问题,并发就是cpu时间片轮转,如A,B两个任务两个并发使用一个cpu,那么A和B是怎么轮转的呢?执行到A的哪里,就去执行B,然后再回来执行A? 即cpu处理到什么时候,就将A挂起,然后去执行B? ...
  • 用C++语言写的一个简单的时间片轮转算法模拟CPU调度过程,写得不好请轻拍
  • 其中第一级采用时间片轮转算法,时间片大小为8ms,第二级同样采用时间片轮转算法,时间片大小为16ms,第三级采用先来先服务算法。 根据下表给出的5个进程的到达时间、执行时间回答下面的问题。(时间以毫秒为...
  • CPU时间、多线程、并发和并行

    千次阅读 2017-06-01 15:29:17
    CPU时间、多线程、并发和并行 1、CPU时间、多线程? 如果线程数不多于CPU核心数,会把各个线程都分配一个核心,不需分,而当线程数多于CPU核心数时才会分。 2、并发和并行的区别 并发:当有多个线程在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 185,363
精华内容 74,145
关键字:

cpu时间片