cpu,核心数,线程抢占式分配理解,时间分片机制总结,进程和线程关系及区别,[通俗易懂]

cpu,核心数,线程抢占式分配理解,时间分片机制总结,进程和线程关系及区别,[通俗易懂]cpu,核心数,线程抢占式分配理解,时间分片机制总结,进程和线程关系及区别,

大家好,又见面了,我是你们的朋友全栈君。

知识点:

1,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是分配资源的基本单位,线程是进程的一个实体,是CPU调度和分派的基本单位

2,线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

2,一个进程包含一个或多个线程;

3,同一个进程中的多个线程之间可以并发执行.

4,一个程序至少有一个进程,一个进程至少有一个线程.

5,线程是CPU分配时间的单位,通常一个CPU内核处理器可以处理一个线程,但是现代cpu通过超线程技术可以同时处理两个线程

cpu,核心数,线程抢占式分配理解,时间分片机制总结,进程和线程关系及区别,[通俗易懂]

6,核心数即cpu个数

7,同一时刻,单个cpu线程数只能处理一个java线程,或者其他任意线程

8,java所有线程都在JVM进程中

9,cpu调度的是进程中的线程

10,当计算机运行的进程中所有线程数大于cpu线程数的时候,操作系统会采用时间片机制:为每个线程分配时间额度,如果当前线程的时间额度用完了,就会被强制停止(不考虑优先级等机制),切换其他线程执行;这样会给人一个计算机能够同时处理很多线程的错觉。

11,cup核心数多当然就能够同时处理多个线程。不过机器就要贵很多了

12,windows NT是抢占先式多任务操作系统,这意味着操作系统不必等待一个线程,它可主动将处理器让给其它线程。在这种方式下,当一个线程已运行了配额的时间后,或出现抢先情况时,操作系统将中断该线程。如图所示:

cpu,核心数,线程抢占式分配理解,时间分片机制总结,进程和线程关系及区别,[通俗易懂]

线程转让CPU处理时间是被迫的。占先式多任务可以防止线程独占CPU,允许其它线程公平地分享CPU执行时间

13,抢占式多任务操作系统的好处是:

     1,对比在16位Windows环境下,如果一个程序进入无限循环,则其它应用程序可能永远没有机会执行;而在Windows NT环境下这种情况不会发生,相反,许多线程的执行部分都采用了循环扫描的结构。这也是实现了多线程的基础。

     2,线程要做很多的的操作,读写磁盘、数据逻辑处理、出于业务需求必要的休眠等等操作时间都能节省下来

14,java设置线程池大小,这里提供三个考量点:

      1,一般情况程序线程数等于cpu线程数的两到三倍就能很好的利用cpu了

      2,一个公式:线程池设定最佳线程数目 = ((线程池设定的线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目

        这个公式的线程cpu时间是预估的程序单个线程在cpu上运行的时间(通常使用loadrunner测试大量运行次数求出平均值)

     3,上面两个方案都是参考而已,给出个大概范围,最后最佳的线程池设定大小还是要根据实际情况,多次实验。

15,多线程时间片机制的代码体现实验案例:

package client.cfca;
/**
 * 下面有四个线程,公用一个方法体,做三次循环,没次每个线程停顿5s
 * @author liuxin
 * @date   2018年8月1日
 */
public class ad {

	public static void main(String[] args) {
		Dog t1=new Dog();
		Dog t2=new Dog();
		Dog t3=new Dog();
		Dog t4=new Dog();
		t1.setName("t1");
		t2.setName("t2");
		t3.setName("t3");
		t4.setName("t4");
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}

class Dog extends Thread{
	private int count=3;
	public  void run(){
			try {
				synchronized (this) {
					for(int i=0;i<3;i++){
						System.out.println(Thread.currentThread().getName()+"    count="+count--);
						sleep(5000);
					}
					System.out.println(Thread.currentThread().getName());
				}
				
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
}

结果:

t1    count=3
t3    count=3
t4    count=3
t2    count=3
t1    count=2
t3    count=2
t4    count=2
t2    count=2
t1    count=1
t3    count=1
t4    count=1
t2    count=1
t1
t3
t4
t2

从结果中可以看出(读者可亲自试验),会发现每次都是差不多5s后四个线程同时打印,三次循环打印差不多都是。可粗略看做是时间分片机制和cpu多核线程可同时处理机制的作用结果。

16,从java角度理解进程与线程:启动一个main方法就启动了一个jvm虚拟机进程,如果我在main程序中又new Thread()了十个线程,那么这个进程中就有一个主线程(main)和十个附加线程。如果我再运行了一个main程序,那么机器中就有两个JVM进程。

17,进程和线程的重要区别:从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配

18,进程多还是线程多的选择:线程执行开销小,但不利于资源的管理和保护,如果频繁启动关闭则最好使用线程;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106204.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月23日 下午2:00
下一篇 2022年4月23日 下午2:20


相关推荐

  • Qt高并发

    Qt高并发QThread是一个低级(low-level)类,适合用于显式地构建长期运行的线程。     QtConcurrent是一个命名空间,提供了用于编写并发软件的更高层次的类和算法。该命名空间中有一个重要的类,QThreadPool,这是一个管理线程池的类。每个Qt应用程序都有一个QThreadPool::globalInstance()函数,它带有一个推荐的最大线程数,在大多数系统上,处理核的数…

    2022年5月28日
    119
  • 图解 Vue 响应式原理

    图解 Vue 响应式原理最近部门分享,有同学提到了Vue响应式原理,大家在讨论时,发现一些同学对这一知识理解还不够深入,不能形成一个闭环,为了帮助大家理解这个问题,我重新过了一下Vue源码,并整理了多张流程图,便于大家理解。Vue初始化模板渲染组件渲染本文Vue源码版本:2.6.11,为了便于理解,均有所删减。本文将从以下两个方面进行探索:从Vue初始化,到首次渲染生成DOM的流程。从Vue数据修改,到页面更新DOM的流程。Vue初始化先从最简单的一段Vue

    2022年4月30日
    40
  • 魔兽世界正式服模拟(战地模拟器破解版)

    背景:从06年玩魔兽到现在也13年了。5.48的时候在国外读研、时间特别多,在艾苏恩的“魔兽夜店”lm公会(永远记得这段快乐的时光),围攻奥格达到了我的顶峰(带团),回国后找工作6.X没玩。从7.x就开始咸鱼,H都没通。现在也得结婚成家了。以后更加咸鱼了,指不定哪天就AFK。差不多06年的时候就混迹于大芒果、藏宝湾这两个网站,虽然是高中生,那时候用家里的破电脑就开始搭建单机版,改数据库。晚上在自己…

    2022年4月15日
    208
  • maven 打的包在哪_maven打包流程学习「建议收藏」

    maven 打的包在哪_maven打包流程学习「建议收藏」前言:最近工作中遇到了几次跟maven打包相关的问题,每个问题上网查资料解决都花了不少时间,很影响工作进度。既然遇到好几次,每次都能发现知识盲点,干脆总结整理一下,啃掉这个难啃的骨头。ps:最近看到了一个很有意思句子:因为今天不想跑步,所以才去跑,这是长距离跑者的思维方式。转载:正文:还是首先描述一下最近遇到的几个问题吧:一、初见springboot多模块项目mvn打包遇到的问题-存在依赖但却…

    2022年5月11日
    44
  • 域渗透之导出域Hash

    域渗透之导出域Hash前言网上采集了一些域内导出NTDS.dit文件的方式Hash值存储在域控制器中(C:\Windows\NTDS\NTDS.DIT)MimikatzMimikatz有一

    2021年12月13日
    59
  • 月之暗面迄今最智能、最全能:Kimi K2.5 模型发布并开源,具备全新视觉理解、代码和 Agent 集群能力

    月之暗面迄今最智能、最全能:Kimi K2.5 模型发布并开源,具备全新视觉理解、代码和 Agent 集群能力

    2026年3月12日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号