进程与线程的关系

什么是进程?

在Window操作系统中,进程分为后台进程和应用进程。

后台进程顾名思义是操作系统开启运行时,启动的进程,负责一些操作系统的基础且重要功能。

应用进程就是当我们用户打开的如qq,qq音乐的应用,对应的也有进程运行。

简单来说,一个程序的运行和启动便是一个进程,当然程序可以反复运行,如谷歌浏览器,你可以打开多个页面,对应的也是多个进程。

一般来说进程分为数据块,代码块和进程控制块组成。而进程是操作系统进行并发调度的最小单位。

进程的大致结构如下图所示:

  • 程序段里面放的是进程的程序指令的内存地址。

  • 数据段里面放的是进程操作需要的数据的内存地址。

  • 至于进程控制块(PCB):
    -- 进程的ID:这是进程的唯一标识。
    -- 进程的名称:给用户看的。
    -- 进程的状态:分为就绪、运行、阻塞、死亡、等待状态。
    -- 进程的上下文:保存的是当前程序计数器的值,以及cpu寄存器里面的数据,内存等数据,也就是进程的环境,可在操作系统做调度切换线程的时候保存,供下次恢复进程的时候使用。

什么是线程?

随着计算机技术的发展,cpu等硬件技术得到快速发展。因此为了提高的cpu的资源利用,同时弥补进程调度过于笨重的问题,进程的内部演化出了并发调度的诉求,于是线程就出现了

线程是CPU调度的最小单位

Java程序的进程执行过程就是标准的多线程的执行过程。每当运行一个Java程序便会启动一个JVM进程。在JVM中至少有两个线程,一个是运行的main程序,一个是GC(垃圾回收器)。

一个标准的线程由三部分组成:线程描述信息、程序计数器、栈内存,如图下所示:

  • 线程的基本信息有:
    -- 线程的ID,唯一标识该线程的,同一个进程内不同线程的ID不会重叠。
    -- 线程的名称,方便用户查看,可指定。
    -- 线程的优先级,也是线程调度的优先级,优先级越大,获得CPU执行的机率就越大。
    -- 线程的状态:
      public static enum State{
         New,//新建
         RUNNABLE,//就绪,运行
         BLOCKED,//阻塞
         WAITING,//等待
         TIME_WAITING,//计时等待
         TERMINATED;//结束
  }

在线程的结构中,程序计数器是非常重要的,它记录着线程下一条程序指令的地址。

在线程的结构中,栈内存是代码段的局部变量的存储空间,是线程独立拥有的,线程之间并不共享,在JDK1.8中,JVM会为每个线程提供1MB的栈内存,且栈内存与堆内存不一样,它是不收GC(垃圾回收器)的管控。

进程和线程的区别?

  • 线程是"进程代码段"的一次顺序执行流程。一个进程有一个或多个线程,一个进程至少有一个线程。
  • 线程是CPU的最小调度单位,进程是操作系统资源调度的最小单位。线程的划分尺度小于进程,使得多线程程序的并发性高。
  • 进程之间是相互独立的,线程之间相互并不独立,线程共享一个进程内的方法区内存,堆内存,文件句柄等系统资源。
  • 线程是由于高并发的诉求在进程内部演变过来的。线程的出现不仅提高了CPU的利用率,也解决了进程调度笨重的问题。
  • 线程上下文切换速度要快于进程上下文切换,所以有人也称线程为轻量级进程。
posted @ 2021-09-23 16:22  蜡笔小新不吃青椒  阅读(227)  评论(0编辑  收藏  举报
Live2D