cpu多线程和jvm多线程(虚拟机设置1核4线程还是2核2线程)

cpu多线程和jvm多线程(虚拟机设置1核4线程还是2核2线程)

首页维修大全综合更新时间:2025-08-18 04:00:32

cpu多线程和jvm多线程

CPU多线程和JVM多线程是两个不同的概念,分别涉及到不同层面的多线程处理。

1. CPU多线程(CPU Multithreading):CPU多线程是指CPU在执行任务时同时处理多个线程的能力。现代的多核CPU通常支持硬件多线程技术,例如超线程(Hyper-Threading)技术,它可以将单个物理核心模拟成两个逻辑核心,使得每个物理核心可以同时执行两个线程。这样可以提高CPU的并行处理能力,使得多个线程可以在同一时间片内并行执行,从而提高系统的整体性能。

2. JVM多线程(JVM Multithreading):JVM多线程是指Java虚拟机(JVM)在执行Java程序时支持多线程的能力。Java语言内置了对多线程的支持,可以创建和管理多个线程,并通过JVM的线程调度器在不同的线程之间进行切换。多线程在Java程序中可以实现并发执行,提高程序的性能和响应能力。通过使用Java的并发库(如java.util.concurrent包),可以更方便地实现线程间的同步、互斥和协作。

总结起来,CPU多线程是指CPU硬件层面上的多线程处理能力,而JVM多线程是指在Java虚拟机上执行的Java程序所具备的多线程能力。CPU多线程是通过硬件技术实现的,而JVM多线程是通过编程语言和虚拟机提供的机制来实现的。在使用Java编写多线程程序时,可以充分利用CPU的多线程能力,让程序在多个线程之间并行执行,提高系统的性能和效率。

一 cpu个数、核数、线程数的关系

cpu个数:是指物理上,也及硬件上的核心数;

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

线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数 * 核数,及程数=cpu个数(2) * 核数(2)=4

Windows: wmic 然后 物理CPU数 “cpu get NumberOfCores”, CPU核心数 “cpu get NumberOfLogicalProcessors”

Linux:

查看CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

查看核数 cat /proc/cpuinfo| grep "cpu cores"| uniq

二 cpu线程数和Java多线程

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

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

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

(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()方法,当前运行的线程将转到阻塞状态,直至另一个线程运行结束,它才会恢复运行(阻塞恢复到就绪)

大家还看了
也许喜欢
更多栏目

© 2021 3dmxku.com,All Rights Reserved.