- 🎥 个人主页:Dikz12
- 📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香
- 欢迎大家👍点赞✍评论⭐收藏
目录
进程
进程在系统中是如何管理的
进一步认识PCB
线程
能否一直增加线程数目来提高效率
进程和线程的区别
进程
进程:就是正在运行的程序.
通过这个图片,可以看到每个进程想要执行,都需要消耗一定的系统资源。
每个进程,都是系统资源分配的基本单位.
进程在系统中是如何管理的
主要考虑两个方面:
1.描述:就是使用类 / 结构体,把被管理的一个对象,这个属性都表示出来。(系统专门有一个结构体描述进程得属性,这个结构体被称为“进程控制块”--PCB).
2.组织:使用数据结构,类似于双向链表 这样的数据结构,把这些表示出来的对象,串起来.(方便后续的增删改查).
想更明确的认识进程特性,就需要进一步认识PCB里面的属性!!!
进一步认识PCB
1.pid:进程的身份标识.
每一个进程都会有一个pid,同一时刻,不同进程之间的pid是不同的.
2.内存指针
每个进程在运行的时候,都会分配一定的内存空间.这样的内存空间,具体在哪里,以及分配的空间有哪些部分,每个部分都是干什么的???都是有一组指针来进行区分的.
也就是描述了进程的“内存资源”是什么样子的.
3.文件描述符表
类似于顺序表 这样的数据结构,和文件有关 => 硬盘 有关.
一个进程也会涉及到硬盘操作,就需要按照文件来操作,进程都操作了那些文件就是通过文件描述符表.描述了进程持有的“硬盘资源”.
PCB中还引入了一些属性,用来支持操作系统实现 进程调度 的效果.
1.进程的状态 (比如:就绪、阻塞.....)
2.进程的优先级 . (有些进程会给更高的优先级,优先调度)
3.进程的上下文. (可以理解为:读档、存档.)
4.进程的记账信息 (通过优先级机制,对不同的进程分配了不同权重的资源)
线程
引入多个进程的初心是什么??
实现并发编程 (现在是多核CPU时代)
多进程,实现并发编程,也有明显的缺点.太重量。效率不高。
如果频繁的创建 / 销毁 进程,开销是不容忽视了.
为了解决上述问题,就引入了“线程”(Thread),也叫做“轻量级进程”.
所以,每个线程,都是可以独立的进行调度的,每一个线程,也有状态,优先级,上下文,记账信息......。一个进程,使用PCB表示,一个进程可能使用一个PCB,也可能使用多个PCB表示,每个PCB对应到一个线程上;前面谈到的,pid、内存指针、文件描述符表也是共用同一份的。
创建线程就不需要重新申请资源了. 直接使用分配给进程的资源,省去了资源分配的开销,所以创建效率就更高了!!!
能否一直增加线程数目来提高效率
所以,线程多了,可能会产冲突,被称为“线程不安全问题”。
如果某个线程抛出异常,没有妥善处理,就可能把整个进程搞崩溃,其它线程也会因此消失.
进程和线程的区别
1.进程是资源分配的基本单位;线程是调度执行的基本单位。
2.进程包含线程,一个进程至少有一个线程,也可以有多个。
3.进程 和 线程 都是用来实现 并发编程, 线程比进程更高效、更轻量。
4. 进程 和 进程 之间具有独立性,一个挂了不会影响到另一个;同一个进程的 线程和 线程之间是可能相互影响的。 (线程安全问题 + 线程异常)