一、什么是进程
关于进程和进程管理等问题,我在前面做出了自己的总价,各位看官可以前往进程与进程管理
总结:
-
程序运行起来了就是产生了进程,一个程序可以对应一个进程,也可以对应多个进程。
-
进程管理
2.1 进程是操作系统进行资源分配的基本单位,每个进程的执行前都要申请资源。
2.2 PCB(进程控制块)包括pid、内存指针、文件描述符等属性。作用是提供一个数据结构,让操作系统可以对进程进行管理和控制。当操作系统需要管理进程时,可以通过PCB来获取进程的状态和信息,进行进程调度、进程同步、进程通信等操作。 -
进程调度
3.1 负责选择哪些进程可以在CPU上执行,以及如何分配CPU时间片
3.2 包括进程状态,进程优先级,进程的上下文,进程的记账信息等 -
虚拟地址空间
4.1 为了防止进程直接访问物理内存,可能对其他进程造成影响,提升隔离性,操作系统给进程分配的是虚拟地址空间。
4.2 每个进程所能访问的地址空间通过页表翻译,再映射到物理内存,这样做可以让进程无法感知自身物理地址的存在。
4.3 如果出现野孩子、下标越界等问题,通过不正确的内存地址在页表中无法翻译,从而找不到对应的物理地址,有效提升了进程与进程之间的隔离性。 -
进程通信:在保证进程的隔离性的前提下,进程间可以通过一块公共区域进行通信,从而实现数据交换。
-
引入进程的目的:实现多个任务并发执行(此处的并发指的是并发和并行同时存在)
-
存在的问题:进程是重量级的,频繁的创建、销毁进程速度慢、资源高
二、什么是线程
进程中包括一个或多个线程
我们使用一个程序(例如直播平台),在直播的过程中有录制画面、录制声音、聊天界面等等,这些具体的功能就相当于一个线程,它们都属于直播平台这个进程,且这些功能是同时进行的,也就引出了多线程并发。
假设房间内的桌子上有很多食物需要尽快的吃完,最开始只有一个人在吃东西,请问怎么才能提高效率?
方案一:我们采取分一半食物在另外一个房间
虽然这样能够提高食物消耗速度,但是这种方法导致我们多了一个房间、一张桌子,并且两个人看不到对方的进度。
这种再提供一个房间就相当于再使用一个进程,形成了多进程方案二:多叫一些人在来吃东西
在同一个房间内一起吃东西,这就是多线程
这样不仅提升了效率,还避免了增加房间、桌子的资源
问题:人数越多越好吗?
桌子的大小是有限的,所能坐下的人数也是有限的。
系统的资源也是有限的,在资源足够的情况下,我们是可以多创建一些线程的。
如果桌子满了,我们还在继续增加人数,可能会导致效率下降。人多了就表示会出现拥挤,挤的过程中,有人被挤出来了,有人又进去了,这种就会导致效率降低。调度本身也有开销。
假如有一个人没有吃上,心情一不好,直接掀桌【不让我吃,大家都别吃了】,这就导致整个饭局结束。
总结:
- 同一个进程中的所有线程,共用同一份资源:内存空间、文件描述符表等。
- 线程可以直接访问同在一个进程中的其他线程;同一个进程中的某一个线程出现异常,可能导致其他线程也出现异常。
- 只有在操作系统创建进程中的第一个线程时,需要去分配资源,后续创建的线程不需要再次申请资源,高效且节省成本。
- 每个线程都是独立的执行流,多个线程之间并发执行.
- 线程是系统调度执行的基本单位。