一、进程与线程
1.进程
在计算机中,进程代表了内存中正在运行的应用程序,计算机中的资源(cpu 内存 磁盘 网络等),会按 照需求分配给每个进程,从而这个进程对应的应用程序就可以使用这些资源了。
进程其实就表示了当 前这个应用程序,在系统中的资源使用情况以及程序运行的情况。如果关闭这个进程,那么对应的应用 程序也就关闭了。进程就是在系统中,运行一个应用程序的基本单位。 jps 查看当前进程 jps -l 可以查看进程类全名
2.线程
线程是进程中的一个代码执行单元,负责当前进程中代码程序的执行,一个进程中有一个或多个线程。 当一个进程中启动了多个线程去分别执行代码的时候,这个程序就是多线程程序。
使用java命令去运行一个类的时候,会先启动JVM,这个JVM对于计算机来讲,就是一个 应用程序,所以同时系统中也会启动一个进程和这个JVM对应。jconcole 查看 jvm 当前运行情况
名字叫main的线程,调用执行我们代码中的main方法。
每个线程都有自己独立的栈区,而堆区是共享的
之前所提到的栈区,又被称为方法调用栈,是线程专门执行方法中代码的地方,并且每一个线 程,都有自己独立的栈空间,和别的线程相互不影响
最先启动的线程是主线程(main线程),因为它要执行程序的入口main方法,在主线程中,创 建并且启动了t线程,启动之后main线程和t线程将各自独立运行,并且争夺CPU的时间片
二、并发和并行
线程的并发执行,是指在一个时间段内,俩个或多个线程,使用一个CPU,进行交替运行。(调动策略)
线程的并行执行,是指在同一时刻,俩个或多个线程,各自使用一个CPU,同时进行运行。
三、时间片
1.概述
时间片,当前一个线程要使用CPU的时候,CPU会分配给这个线程一小段时间(毫秒级别),这段时间 就叫做时间片,也就是该线程允许使用CPU运行的时间,在这个期间,线程拥有CPU的使用权。
2.调度
当俩个或多个线程使用一个CPU来运行代码的时候,在操作系统的内核中,就会有相应的算法来控制线 程获取CPU时间片的方式,从而使得这些线程可以按照某种顺序来使用cpu运行代码,这种情况被称为线 程调用【调度】。
常见的调度方式:
- 时间片轮转
所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。
- 抢占式调度
系统会让优先级高的线程优先使用 CPU(提高抢占到的概