进程与线程

进程是程序的一次执行,由程序段、数据段和PCB组成,线程是CPU调度的最小单位,存在于进程中,共享进程资源。Java程序在JVM中运行,每个进程至少包含一个主线程。线程比进程更轻量级,上下文切换更快,提高了并发性能。
摘要由CSDN通过智能技术生成

进程与线程

进程
什么是进程

​ 什么是进程呢?简单来说,进程是程序的一次启动执行。什么是 程序呢?程序是存放在硬盘中的可执行文件,主要包括代码指令和数 据。一个进程是一个程序的一次启动和执行,是操作系统将程序装入 内存,给程序分配必要的系统资源,并且开始运行程序的指令。

​ 进程与程序是什么关系呢?同一个程序可以多次启动,对应多个 进程。比如,多次打开Chrome浏览器程序,对应的就是多个Chrome进程。

进程的组成

​ 进程是程序执行和系统进行并发调度的最小单位。一般来说一个进程是由程序段、数据段和程序控制块三部分组成。进程结构图如下:

在这里插入图片描述

程序段

​ 程序段一般也被称为代码段。代码段是进程的程序指令在内存中的位置,包含需要执行指令的集合。

数据段

​ 数据段是进程的操作数据在内存中的位置,包含需要操作的数据集合。

程序控制块

​ 程序控制块(Program ControlBlock,PCB)包含进程的描述信息和控制信息,是进程存在的唯一标志。

描述信息:主要包括进程ID和进程名称,进程ID是唯一的,代表进程的身份;进程状态,比如运行、就绪、阻塞;进程优先级,是进程调度的重要依据。

调度信息:主要包括程序起始地址,程序的第一行指令的内存地址,从这里开始程序的执行;通信信息,进程间通信时的消息队列。

资源信息:主要包括内存信息,内存占用情况和内存管理所用的数据结构;I/O设备信息,所用到的I/O设备编号及相应的数据结构;文件句柄,所打开文件的信息。

进程上下文:主要包括执行时各种CPU寄存器的值、当前程序计数器(PC)的值以及各种栈的值等,即进程的环境。在操作系统切换进程时,当前进程被迫让出CPU,当前进程的上下文就保存在PCB结构中,供下次恢复运行时使用。

例子

​ Java编写的程序都运行在Java虚拟机(JVM)中,每当使用Java命 令启动一个Java应用程序时,就会启动一个JVM进程。在这个JVM进程 内部,所有Java程序代码都是以线程来运行的。JVM找到程序的入口点 main()方法,然后运行main()方法,这样就产生了一个线程,这个线 程被称为主线程。当main()方法结束后,主线程运行完成,JVM进程也 随即退出。

线程
什么是线程

​ 早期的操作系统只有进程而没有线程,随着科技的发展,CPU的性能越来越高,而且从单核CPU发展为多核CPU,为了充分发挥CPU的计算性能,提升CPU硬件 资源的利用率,同时弥补进程调度过于笨重产生的问题,进程内部演 进出了并发调度的诉求,于是就发明了线程。

​ 线程是指“进程代码段”的一次顺序执行流程。一个进程可以有一个或多个线程,各个线程之间共享进程 的内存空间、系统资源,进程仍然是操作系统资源分配的最小单位。

线程的组成

​ 线程是CPU调度的 最小单位。一个标准的线程主要由三部分组成,即线程描述信息、程序计数 器(Program Counter,PC)和栈内存。线程结构图如下:

在这里插入图片描述

线程描述信息

​ 线程的描述信息即线程的基本信息。

线程ID:线程的唯一标识,同一个进程内不同线程的ID不会重叠。

线程名称:主要是方便用户识别,用户可以指定线程的名字,如果没有指定,系统就会自动分配一个名称。

线程优先级:表示线程调度的优先级,优先级越高,获得CPU的执行机会越大。

线程状态:标识当前线程的执行状态,为新建、就绪、运行、阻塞、结束等状态中的一种。

​ 其他的一些信息,如是否为守护线程等。

程序计数器

​ 在线程的结构中,程序计数器很重要,它记录着线程下一条指令的代码段内存地址。

栈内存

​ 在线程的结构中,占内存是代码段中局部变量的存储空间,为线程所独立拥有,在线程之间不共享。在JDK1.8中,每个线程在创建是默认被分配1MB大小的栈内存。栈内存和堆内存不同,栈内存不受垃圾回收器管理。

例子

​ Java程序的进程执行过程就是标准的多线程的执行过程。每当使 用Java命令执行一个class类时,实际上就是启动了一个JVM进程。理 论上,在该进程的内部至少会启动两个线程,一个是main线程,另一 个是GC(垃圾回收)线程。实际上,执行一个Java程序后,线程数量远远不止两个,达到了18个之 多。

进程与线程的区别
  1. 线程是“进程代码段”的一次顺序执行流程。一个进程由一个或多个线程组成,一个进程至少有一个线程。
  2. 线程是CPU调度的最小单位,进程是操作系统分配资源的最小单位。线程的划分尺度小于进程,使得多线程程序得并发性高。
  3. 线程是出于高并发得调度诉求从进程内部演进而来的。线程的出现既充分发挥了CPU的计算性能,又弥补了进程调度过于笨重的问题。
  4. 进程之间是相互独立的,但进程内部的各个线程之间并不完全独立。各个线程之间共享进程的方法区内存、堆内存、系统资源(文件句柄、系统信号等)。
  5. 切换速度不同,线程上下文切换比进程上下文切换要快得多。所以有的时候线程也称为轻量级进程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值