进程与线程的关系

2021年11月22日 阅读数:2
这篇文章主要向大家介绍进程与线程的关系,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

什么是进程?

在Window操做系统中,进程分为后台进程和应用进程。浏览器

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

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

简单来讲,一个程序的运行和启动即是一个进程,固然程序能够反复运行,如谷歌浏览器,你能够打开多个页面,对应的也是多个进程。高并发

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

进程的大体结构以下图所示:
线程

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

  • 数据段里面放的是进程操做须要的数据的内存地址。blog

  • 至于进程控制块(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的利用率,也解决了进程调度笨重的问题。
  • 线程上下文切换速度要快于进程上下文切换,因此有人也称线程为轻量级进程。