CPU核心数,线程数,时间片轮起色制解读


点击上方蓝字关注咱们,了解更多内容

CPU核心数,线程数

CPU个数、核心数、线程数的关系:

  • CPU个数:是指物理上,即硬件上的核心数;web

  • 核心数:是逻辑上的,简单理解为逻辑上模拟出的核心数;算法

  • 线程数:是同一时刻设备能并行执行的程序个数,线程数 = cpu个数 * 核数;微信

CPU线程数和Java多线程概念:

  • 单个CPU线程在同一时刻只能执行单一Java程序,也就是一个线程多线程

  • 单个线程同时只能在单个CPU线程中执行并发

  • 线程是操做系统最小的调度单位,进程是资源(好比:内存)分配的最小单位app

  • Java中的全部线程在JVM进程中,CPU调度的是进程中的线程编辑器

  • Java多线程并非因为CPU线程数为多个才称为多线程,当Java线程数大于CPU线程数,操做系统使用时间片机制,采用线程调度算法,频繁的进行线程切换。flex

IO阻塞时,线程会释放CPU吗?

当线程处于IO操做时,线程是阻塞的,线程由运行状态切换到等待状态。此时CPU会作上下文切换,以便处理其余程序;当IO操做完成后,CPU会收到一个来自硬盘的中断信号,CPU正在执行的线程所以会被打断,回到ready队列。而先前因I/O而waiting的线程随着I/O的完成也再次回到就绪队列,此时CPU可能会选择他执行。ui

JAVA中并发和并行的概念

并行:指两个或多个事件在同一时刻点发生,CPU同时执行;并发:指两个或多个事件在同一时间段内发生,CPU交替执行;spa

JAVA线程能够同时在多个核上运行吗?(思考)

操做系统是基于线程调度的,在同一时刻,JAVA进程中不一样的线程可能会在不一样的核上并行运行。

线程是调度的最小单位,而进程是资源(好比:内存)分配的最小单位。

时间片轮起色制

时间片轮转法(Round-Robin,RR):

根据先进先出原则,排成队列(就绪队列),调度时,将CPU分配给队首进程,让其执行一个时间段(称为:时间片),时间片一般为10-100ms数量级,当执行的时间片用完时,会由计时器发出时钟中断请求,调度程序便据此来中止该进程的执行,并将它排到队列末尾,而后再把CPU从新分配给当前队列的队首进程,同理如此往复。

时间片大小取决于:

    1. 系统对响应时间的要求

    1. 就绪队列中进程的数目

    1. 系统的处理能力

进程调度

采用此算法的系统,其程序就绪队列每每按进程到达的时间来排序。进程调度程序老是选择就绪队列中的第一个进程,也就是说按照先来先服务原则调度,但一旦进程占用处理机则仅使用一个时间片。在使用一个时间片后,进程尚未完成其运行,它必须释放出处理机给下一个就绪的进程,而被抢占的进程返回到就绪队列的末尾从新排队等待再次运行。

处理器同一个时间只能处理一个任务。处理器在处理多任务的时候,就要看请求的时间顺序,若是时间一致,就要进行预测。挑到一个任务后,须要若干步骤才能作完,这些步骤中有些须要处理器参与,有些不须要(如磁盘控制器的存储过程)。不须要处理器处理的时候,这部分时间就要分配给其余的进程。原来的进程就要处于等待的时间段上。通过周密分配时间,宏观上就象是多个任务一块儿运行同样,但微观上是有前后的,就是时间片轮换。

实现思想

时间片轮转算法的基本思想是,系统将全部的就绪进程按先来先服务算法的原则,排成一个队列,每次调度时,系统把处理机分配给队列首进程,并让其执行一个时间片。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序根据这个请求中止该进程的运行,将它送到就绪队列的末尾,再把处理机分给就绪队列中新的队列首进程,同时让它也执行一个时间片


Java调度机制

全部的Java虚拟机都有一个线程调度器,用来肯定哪一个时刻运行哪一个线程。主要包含两种:抢占式线程调度器和协做式线程调度器。

  • 抢占式线程调度: 每一个线程可能会有本身的优先级,可是优先及并不意味着高优先级的线程必定会被调度,而是由CPU随机的选择,所谓抢占式的线程调度,就是说一个线程在执行本身的任务时,虽然任务尚未执行完,可是CPU会迫使它暂停,让其它线程占有CPU的使用权。

  • 协做式线程调度: 每一个线程能够有本身的优先级,但优先级并不意味着高优先级的线程必定会被最早调度,而是由cpu时机选择的,所谓协做式的线程调度,就是说一个线程在执行本身的任务时,不容许被中途打断,必定等当前线程将任务执行完毕后才会释放对cpu的占有,其它线程才能够抢占该cpu。

二者对比:

抢占式线程调度不易发生饥饿现象,不易由于一个线程的问题而影响整个进程的执行,可是其频繁阻塞与调度,会形成系统资源的浪费。协做式的线程调度很容易由于一个线程的问题致使整个进程中其它线程饥饿。

总结:

  • Java在调度机制上采用的是抢占式的线程调度机制。

  • Java线程在运行的过程当中多个线程之间协做式的。



夯实基础,关注前沿,娱乐生活

掌握更多前沿技术,获取更多笑点 

请关注--------喘口仙氣



本文分享自微信公众号 - 喘口仙氣(gh_db8538619cdd)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索