多线程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()方法,当前正在运行的线程会进入阻塞状态,直到另一个线程运行完毕才恢复运行(阻塞恢复为就绪)。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。