【Java并发编程篇】CPU和Java线程连接

cpu个数:是指物理上,也及硬件上的核心数;
核数:是逻辑上的,简单理解为逻辑上模拟出的核心数;一个CPU核心数模拟出2线程的CPU
线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数 * 核数,及程数=cpu个数(2) * 核数(2)=4

cpu线程数和Java多线程

(1) 线程是CPU级别的,单个线程同时只能在单个cpu线程中执行

(2) Java多线程并不是由于cpu线程数为多个才称为多线程,当Java线程数大于cpu线程数,操作系统使用时间片机制,采用线程调度算法,频繁的进行线程切换。

(3) 线程是操作系统最小的调度单位,进程是资源(比如:内存)分配的最小单位

(4) Java中的所有线程在JVM进程中,CPU调度的是进程中的线程

线程的调度是指按照特定的机制为多个线程分配CPU的使用权。有两种调度模型:分时调度模型和抢占式调度模型
分时调度模型是指让所有线程轮流获得CPU的使用权,并且平均分配每个线程占用CPU的时间片。
Java虚拟机采用抢占式调度模型,是指优先让可运行池中处于就绪态的线程中优先级高的占用CPU,如果可运行池中线程的优先级相同,那么就随机选择一个线程,使其占用CPU,处于运行状态的线程会一直执行,直至它不得不放弃CPU,一个线程会因为以下原因放弃CPU:

  • Java虚拟机让当前线程暂时放弃CPU,转到就绪态,使其他线程获得运行机会
  • 当前线程因为某些原因而处于阻塞状态
  • 线程运行结束

 

posted @ 2021-12-18 12:26  残城碎梦  阅读(78)  评论(0编辑  收藏  举报