zoukankan      html  css  js  c++  java
  • CPU线程 和 Java线程

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

    参考 

    https://blog.csdn.net/qq_35529801/article/details/78699867

    https://www.cnblogs.com/timxgb/p/9507316.html

  • 相关阅读:
    Jocke的IOT之路--raspberrypi更换国内镜像
    利用PostMan 模拟上传/下载文件
    Java中的Lambda表达式
    设计模式之Jdk动态代理
    设计模式之代理模式
    Java内存模型及Java关键字 volatile的作用和使用说明
    JVM GC-----4、finalize()方法
    JVM GC-----3、垃圾对象的标记思路(二)
    JVM GC-----2、垃圾对象的标记思路(一)
    JVM GC-----1、垃圾回收算法
  • 原文地址:https://www.cnblogs.com/webglcn/p/10639065.html
Copyright © 2011-2022 走看看