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机器上运行,而进程则可以跨机器迁移。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • DOS分区表(Boot Sector引导扇区)[通俗易懂]

    DOS分区表(Boot Sector引导扇区)[通俗易懂]>>DOS分区体系的硬盘也叫MBR硬盘,0号扇区是主引导记录MBR,DOS分区体系的硬盘用分区表记录每个分区的类型起始位置和分区的大小。其中,分区表就在0号扇区内,所以0号扇区如果损坏,那么这个硬盘就不能正确识别分区。>>DOS分区的使用范围:windows系统,Linux系统以及基于IA32平台FreeDBS和OpenDBS等操作系统都使用DOS分区体系。&g…

    2022年10月23日
  • Excel 增加删除线

    Excel 增加删除线Excel增加删除线操作如下:2.选中删除线即增加删除线,去掉删除线即删除删除线,颜色可以定义成红色之类。

  • bzero和memset哪个更耗时_malloc_trim

    bzero和memset哪个更耗时_malloc_trim 关于字符数组的初始化,在项目的压力测试中,发现性能明显下降,变怀疑在程序中的若干临时字符数组的初始化(使用bzero)身上。于是修改为首个字符置零的方式而非全部置零的方式初始化,响应得到明显的提升。原来在mp3检索的每一条结果都要进行bzero对临时数组初始化,每一个请求需要30次的bzero对临时数组的置零。于是想到了,在非必要的情况下,只对临时数组的第一个(或前几个)字符置零的初始化

    2022年10月10日
  • 【树莓派4B学习】十四、树莓派4B串口通信

    【树莓派4B学习】十四、树莓派4B串口通信树莓派的串口默认为SSH调试使用树莓派如何开启串口,这里不再赘述可参考这里一、必须要先知道的储备知识树莓派4B的外设一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠,mini串口性能低,功能也简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供,因此mini串…

  • 【网页设计的12种颜色】「建议收藏」

    前不久,ColourLovers.com公布了一项调查结果。他们发…

  • JAVA日期格式化(Simpledateformat)

    Java日期格式化常用方法Java中Date类中的一些日期格式话方法都已过期,所以不推荐使用。一般格式化时,常用到这两个类:Calendar和SimpleDateFormat,使用方法如下:1.Calendar类Calendar类是abstract的,所以实例化方式得用静态方法:Calendarc=Calendar.getInstance();,此时的生成的实例依据的是当前系统时间;c.se…

发表回复

您的电子邮箱地址不会被公开。

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