详解程序进程与线程

Posted Ferron Zhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解程序进程与线程相关的知识,希望对你有一定的参考价值。

1、概念

程序:程序只是一串代码,是一串指令的有序集合,它只是一个静态的实体,本身并没有任何运行的含义。

进程:进程是一个程序(可以理解成一串代码)的一次运行,它相当于是一串代码执行的过程。包含了代码的加载、执行一直到执行完成。在Java中这个过程便是相当于一个源代码(.java)经过编译器javac编译成字节码(.class)文件之后,再由JVM中的类加载器加载字节码文件,创建的类、实例和成员变量存储在堆内存,而方法与局部变量等就存储在栈内存,一直该字节码解释完成为止。进程是系统进行资源分配和调度的一个独立单位。

线程:线程的话则相当于是进程的一个实体,是CPU调度和分派的基础单位,它是比进程更小的一个能够独立运行的基本单位。一个进程有一个或多个线程,线程属于进程。

2、程序与进程的区别

状态是否具有资源是否有唯一标识符是否具有并发性
进程动态
程序静态

3、进程的基本状态

  • 就绪状态:当一个进程获得除CPU资源以外的所有资源,只要一旦获得CPU资源就可运行时,此时就为就绪状态。
  • 执行状态:进程已获得CPU资源,正在执行。
  • 阻塞状态:正在执行的进程因为发生某些事件而暂时无法继续执行,此时相当于整个进程暂停了。进一步了解阻塞Java中的BIO、NIO和AIO

4、线程生命周期

  1. 创建:Java中线程的创建有两种方式:继承Thread父类或实现Runable接口

  2. 执行:Java中线程创建就有了该线程的内存空间,但是JVM并没有让这个线程开始执行,而是必须调用该线程的start()方法后,该线程才会开始执行。

  3. 中断:

    • JVM将CPU的使用资源分配给了其他线程
    • 该线程执行时调用了sleep()wait()方法
    • 该线程在使用CPU资源过程中,发生了某些事件导致了阻塞
  4. 死亡:

    • 线程执行完毕
    • 线程在执行完毕之前被提前终止。

5、线程状态

线程的状态与程序的生命周期息息相关,以下是线程的六种状态

  • 初始化:该线程已经被初始化,其在JVM中已经占用内存空间,但是不属于JVM管理的线程中,也就是该线程没有执行其start()方法
  • 运行:这种状态就是线程被初始化之后并且调用了start()方法,该种状态有两种情况:准备就绪和运行中,区别就是是否获得了CPU资源。
  • 阻塞:该线程调用sleep()wait()方法、等待I/O或无法持有锁进入同步代码时,线程进入阻塞状态。
  • 等待:该线程进入等待执行的状态,需要要某些特定事件显式地唤醒,否则会无限期地等待
  • 超时等待:该线程进入等待执行的状态,其也可以被某些事件显式地唤醒,但是与等待不同的是,这种状态等待一个特定的时间候会被唤醒。
  • 终止:该线程已经执行完毕。

件显式地唤醒,但是与等待不同的是,这种状态等待一个特定的时间候会被唤醒。

  • 终止:该线程已经执行完毕。

以上是关于详解程序进程与线程的主要内容,如果未能解决你的问题,请参考以下文章

Event Loop详解

详解C++多线程

详解Python进程与线程

java线程详解

Java进程,多线程详解

大数据必学Java基础(七十五):多线程与程序进程线程之间概念详解