1.进程的概念
进程(Process)是计算机中的一个实体,是具有一定独立功能的程序关于某个数据集合上的一次运行活动,也是系统进行资源分配和调度的一个独立单元。进程是程序在处理机上的一次执行过程,具有生命周期,它动态地被创建,并被调度执行,执行完成后消亡。进程是资源分配的基本单位,它拥有自己的地址空间和各种资源,如内存、文件句柄等。
2.线程的概念
线程(Thread)也被称为轻量级进程,它是比进程更小的活动单位,是进程中的一个执行路径或实体。线程是处理机调度的基本单位,它只能和其他线程共享进程的资源,而本身并没有任何资源(除了运行中必不可少的资源,如线程ID、计数器、寄存器集合和堆栈)。一个进程可以拥有多个线程,这些线程共享该进程的所有资源。
上面的文字对大多数读者来说,还是莫过于难理解了,现在小编用大白话给大家解释一下,帮助大家理解线程和进程大概是什么。
进程就像是计算机中的一个“大任务”,它包含了程序运行所需要的所有资源,比如程序代码、数据、文件等。每个进程都像是计算机中的一个独立“盒子”,里面装着运行这个程序所需的一切。
举个栗子:想象你正在使用电脑同时运行着浏览器、音乐播放器和文档编辑器。这三个程序分别对应了三个进程。每个进程都独立地运行在自己的“盒子”里,互不干扰。浏览器进程负责显示网页,音乐播放器进程负责播放音乐,文档编辑器进程则负责编辑文档。
线程则是进程中的一个“小任务”或“执行流”。一个进程可以包含多个线程,这些线程共享进程的资源,但各自执行不同的任务。线程是CPU调度的基本单位,CPU会轮流给每个线程分配时间片,让它们有机会执行自己的任务。
继续上面的栗子,假设你在浏览器进程中打开了多个网页标签。每个网页标签都可以看作是一个线程。这些线程共享浏览器进程的资源(如内存、网络连接等),但各自负责加载和显示不同的网页内容。CPU会轮流给这些线程分配时间(时间片),让它们能够同时(或看似同时)加载和显示网页。
3. 进程和线程的组成
3.1 进程的组成
3.2 线程的组成
一、基本组成部分
- 线程ID:线程标识符(Thread ID),用于唯一标识一个线程。
- 当前指令指针(PC):也称为程序计数器(Program Counter),用于存储线程当前正在执行的指令的地址。
- 寄存器集合:线程在执行过程中需要使用的各种寄存器,包括通用寄存器、特殊功能寄存器等。这些寄存器用于存储临时数据、操作结果、控制信息等。
- 堆栈:堆栈是线程中用于存储局部变量、方法调用参数、返回值以及控制流程的重要数据结构。每个线程都有自己独立的堆栈,以保证线程间的数据隔离和安全性。
二、其他组成部分
除了上述基本组成部分外,线程还可能包括其他一些辅助性的组成部分,如: - 线程状态:线程在执行过程中会经历不同的状态,如新建(New)、就绪(Ready)、运行(Running)、阻塞(Blocked)和终止(Terminated)等。这些状态反映了线程的生命周期和当前执行状况。
- 线程优先级:操作系统会根据线程的优先级来调度线程的执行。优先级高的线程更容易获得CPU资源并执行。
- 线程属性:包括线程的名称、所属的进程、是否可守护(Daemon)等。这些属性用于描述线程的基本特征和行为。
4. 进程和线程的特点
4.1 进程的特点
- 独立性:进程是独立的每个进程有自己的地址空间、文件描述符等资源。
- 动态性:进程在其生命周期内是动态变化的,包括创建、运行、阻塞、挂起和终止等状态。
- 并发性:多个进程可以在系统中并发执行,但并发并不意味着并行(除非在多核CPU上)。
4.2 线程的特点
- 共享性:同一进程内的多个线程共享该进程的资源,如内存、文件描述符等。
- 轻量级:线程的创建、销毁和切换的代价通常比进程小得多。
- 并发性:多个线程可以在同一进程内并发执行,提高程序的执行效率和响应速度。
5.进程和线程的区别
5.1 资源占用
进程拥有独立的内存空间和系统资源,而线程共享进程的资源。
进程切换时,需要保存和恢复整个进程的状态,包括内存、文件描述符等,而线程切换时只需保存和恢复线程的状态,包括栈、寄存器等。
5.2 通信方式
进程间通信(IPC)需要通过操作系统提供的机制,如管道、消息队列、共享内存等。
线程间通信相对简单,因为它们共享进程的内存空间,可以直接读写共享变量或使用线程特有的通信机制(如条件变量、信号量等)。
5.3 并发性
进程可以并发执行,但由于资源独立性和切换代价较高,通常用于不同程序或服务的并发。
线程更适合于同一程序内多个任务的并发执行,可以提高程序的执行效率和响应速度。
6. 并发和并行
并发:同一时刻,多个任务交替执行,造成一种“貌似同时”发生的错觉,单核CPU执行多任务叫做并发。
并行:同一时刻,多个任务同时执行,多核CPU同时执行,实现并行。(下列图示)
7. PCB
PCB是进程存在的唯一标识,PCB描述了关于进程的相关属性信息。
8. 补充事项
- 在系统中,进程是通过PCB这样的结构体来描述的,通过链表的形式来组织的。
- 对于系统来说,线程,同样也是通过PCB来描述的。
- 进程是由 一个/组 线程组成的,一个线程由一个PCB来描述,所以一个进程其实是一 个/组 PCB。
- 一个进程至少包含有一个线程。
- 如果有多个线程在一个进程中,每个线程,都有自己的状态,优先级,上下文,记账信息,每个都会各自独立的在CPU上调度执行。
- 线程比进程轻量主要是在于,在创建进程的时候,系统会给进程分配资源,而创建线程便可以省去创建资源,只需要与其他线程分配资源。也省去了“释放资源”。
9.注意事项
多个线程之间可能会相互影响,一旦其中某个线程发生抛出异常,可能会把其他所以线程均带走。
多个进程之间不会相互影响,某个进程崩溃了,不会影响到其他的进程(也常把这点称为“进程的隔离性”)。
以上就是小编为大家分享的全部内容,希望对大家有所帮助~