2016 - 2024

感恩一路有你

多线程java cpu多线程和jvm多线程?

浏览量:2621 时间:2023-01-07 20:44:36 作者:采采

多线程java cpu多线程和jvm多线程?

cpu多线程和jvm多线程?

cpu数量、内核数量和线程数量之间的关系

CPU数量:指物理和硬件中核心的数量;

内核数:是逻辑上的,简单理解为逻辑上模拟的内核数;一个CPU核心数模拟一个2线程CPU。

线程数:指设备可以同时并行执行的程序数量。线程=CPU数量*内核数量,进程=CPU数量(2) *内核数量(2)=4。

Windows: wmic然后物理CPU号“CPU获取核心数”和CPU核心号“CPU获取逻辑处理器数”

Linux:

检查CPU号cat/proc/CPU info | grep # 34 physical id # 34 | sort | uniq | WC-l

检查核心数cat/proc/CPU info | grep # 34 CPU cores # 34 | uniq

两个cpu线程和Java多线程

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

(2) Java多线程因为cpu线程数是倍数,所以不叫多线程。当Java线程数大于cpu线程数时,操作系统使用时间片机制和线程调度算法频繁切换线程。

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

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

线程调度是指根据特定的机制将CPU使用权分配给多个线程。有两种调度模型:分时调度模型和抢占式调度模型。

分时调度模型是指让所有线程轮流获得CPU的使用权,平均分配每个线程占用CPU的时间片。

Java虚拟机采用抢占式调度模式,即让可运行池中处于就绪状态的线程优先占用CPU。如果可运行池中的线程具有相同的优先级,那么将随机选择一个线程来占用CPU。正在运行的线程会一直执行,直到不得不放弃CPU,有一个线程会因为以下原因放弃CPU:

(1)Java虚拟机使当前线程暂时放弃CPU,转入就绪状态,让其他线程获得运行机会。

(2)当前线程由于某种原因被阻塞。

(3)螺纹运行结束

Java线程产量:

3.Thread.yield()方法

也就是说,当一个线程使用这个方法时,它会放弃自己的CPU执行时间,让自己或者其他线程运行。注意是让自己或者其他线程运行(根据CPU调度),而不是简单的交给其他线程。

4.等待其他线程完成:join()

当前正在运行的线程可以调用另一个线程的join()方法,当前正在运行的线程会进入阻塞状态,直到另一个线程运行完毕才恢复运行(阻塞恢复为就绪)。

线程 CPU Java 数量 核心

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。