进程和线程

62 阅读2分钟

是什么

  1. 进程是操作系统进行资源分配和调度的基本单位。也就是说,操作系统在分配资源时把资源分配给进程
  2. 线程是CPU分配的基本单位

进程与线程的关系

一个进程至少有一个线程,进程中多个线程共享进程的资源。

image.png
如图所示,一个进程中有多个线程,多个线程共享进程的堆和方法区,每个线程都有自己的程序计数器和栈。

  • 堆:存储new操作创建的对象
  • 方法区:存储JVM加载的类、常量和静态变量信息
  • 程序计数器:记录当前线程要执行的指令地址
  • 虚拟机栈:存储线程的局部变量;存储线程的调用栈帧

举例说明

在Java中,启动main函数,其实就是启动一个JVM进程。main函数所在的线程就是该进程的一个线程,也称为主线程

思考

  • 为什么程序计数器设计为线程私有的?
    线程是占用CPU执行的基本单元,而CPU一般是使用时间片轮转方式让线程轮询占用的。所以,在当前线程CPU时间片使用完后,要让出CPU,等下次轮到自己的时候再次执行。程序计数器记录该线程让出CPU时的执行地址,等到再次分配到CPU的时间片时,进程可以直接从自己的程序计数器取出指定的地址继续运行。
  • 程序计数器一定是存储下一条指令的地址吗? 不是的,当执行的是native方法时,程序计数器记录的是undefined地址,只有执行的是java代码时,程序计数器记录的才是下一条指令的地址