一篇文章帮你搞懂什么是java的进程和线程
为什么会有进程
在简单的批处理操作系统中,作业时串行执行的,即一个作业一旦开始执行,它就会计算机系统的所有资源,直到运行结束之后,下一个作业才可以继续执行。
在多道程序设计批处理的系统中,多个作业可以被载入内存,从宏观上看,多个作业并行执行,他们共享处理器、内存等计算机资源。
在分时系统中,为支持多用户交互,处理器在时间维度上被划为若干间隙,在每一时间间隙,一个用户完全占有计算器资源。由于时间间隙很短,在宏观上看,计算机任可以同时为多个用户服务、提高计算机与用户交互的效率。
程序或作业的并发执行是现代操作系统的一个基本特征。并发执行的程序必要满足以下几个特征才能称为真正意义上的并发执行:
资源共享的需求、相互隔离的要求、通信和同步的要求
要实现多个程序的并发执行,它们必需能够共享处理器、内存以及I/O设备等计算机资源。
尽管多个程序并发执行,但在逻辑上各个程序应当是相互独立的,即一个程序的执行结果不受其它程序执行的影响。
有时候,程序之间不完全是相互隔离的,而是存在依赖关系的,即需要进行通信和同步。
所以要实现真正意义上的并发,单纯的依靠处理器的指令循环是远远不够的。
进程的概念
进程是对一个计算任务的抽象和封装,使每个计算任务更好地实现隔离性、资源共享性和同步的需求。
进程的说法有很多、可以这样理解进程的概念:
1.进程是计算机程序在处理器上执行时所发生的活动,即进程时程序的一次执行活动
2.进程是对一次计算任务的封装和抽象、它是一个由执行流、一个数据集、和相关的系统的资源组成的一个活动单元。
3.进程是程序执行的一次实例,是动态的概念、而程序本质上是一个规则(是一个二进制串、也就是机器指令)、通常以文件的形式存在、是静态的概念、一个计算机可以同时运行一个程序的多个进程。
4.进程之间共享计算机资源、并在逻辑上相互独立、或者通过同步机制相互的协调,共同的完成一项计算任务。
进程的特征
进程是由多程序的并发执行而引出的,它和程序是两个截然不同的概念。进程的基本特征是对比单个程序的顺序执行提出的,也是对进程管理提出的基本要求。
动态性:进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。
并发性:指多个进程实体,同存于内存中,能在一段时间内同时运行,并发性是进程的重要特征,同时也是操作系统的重要特征。引入进程的目的就是为了使程序能与其他进程的程序并发执行,以提高资源利用率。
独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。
异步性:由于进程的相互制约,使进程具有执行的间断性,即进程按各自独立的、 不可预知的速度向前推进。异步性会导致执行结果的不可再现性,为此,在操作系统中必须配置相应的进程同步机制。
结构性:每个进程都配置一个PCB对其进行描述。从结构上看,进程实体是由程序段、数据段和进程控制段三部分组成的。
线程
是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程的结构
线程控制块:与进程控制块类似,包含了描述线程属性的信息,如线程ID、线程的栈指针、程序计数器、条件码和通用寄存器的值等,以及线程的执行状态(运行、就绪等)。
线程执行栈:保存一个线程执行过程中的活动记录,包括用户栈和内核栈。其中用户栈用于保存过程调用的活动记录,内核栈用于保存系统调用的活动记录。执行栈对于每个线程来说都是私有的,因此不同线程的执行流不会发生相互干扰。
线程局部存储(TLS,Thread Local Storage):是某些操作系统为线程单独提供的私有空间,用于存储每个线程私有的全局变量,即一个线程内部的各个过程调用都能访问、但其他线程不能访问的变量。
进程之中创建线程的优点
在一个进程之中创建线程的优点:
1.在一个已有的进程之中创建一个线程比创建一个新的进程所需的开销时间要少许多、Mach开发者的研究表明、创建一个线程比创建一个进程快10倍。
2.终止一个线程比终止一个进程所花费的时间要少
3.同一个进程内线程之间的切换所花费的时间要比进程之间切换所花费的时间要少
4.线程提高了程序之间的通信效率、在大多数的操作系统中、独立的进程之间的通信需要内核的介入、但是同一个进程之中的线程共享内存和文件、同一个进程之中的线程之间的通信不需要内核的介入。
进程和线程的区别
地址空间:
线程共享本进程的地址空间,而进程之间是独立的地址空间。
资源:
线程共享本进程的资源如内存、I/O、cpu等,不利于资源的管理和保护,而进程之间的资源是独立的,能很好的进行资源管理和保护。
健壮性:
多进程要比多线程健壮,一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。
执行过程:
每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口,执行开销大。
线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,执行开销小。
可并发性:
两者均可并发执行。
切换时:
进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
线程是处理器调度的最小单位,但是进程时操作系统资源分配的最小单位。
进程和线程之间的关系
线程:进程 | 描述 | 示例系统 |
---|---|---|
1:1 | 一个进程中只有一个线程 | 比如UNIX |
M:1 | 可以在一个进程之中创建多个的线程、这些线程共享进程用户的地址空间 | Windows NT、Linux、MACH、Solaris |
1:M | 一个线程可以从一个进程环境迁移到另一个进程环境中 | RS、Emerald |
M:N | 也就是结合了M:1和1:M的情况 | TRIX |
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
相关文章
Spring中的DeferredImportSelector实现详解
这篇文章主要介绍了Spring中的DeferredImportSelector实现详解,两个官方的实现类AutoConfigurationImportSelector和ImportAutoConfigurationImportSelector都是Spring Boot后新增的实现,需要的朋友可以参考下2024-01-01
最新评论