前言
今天带来一些进程与线程的相关概念。
接下来让我们步入正题:
我对进程和线程的理解就是工作时段的一个描述
-
进程描述了 CPU 在运⾏指令及加载和保存上下⽂所需的时间,放在应⽤上来说就代表了⼀个程序的执行。
-
线程是比进程中的更⼩单位,描述了执⾏⼀段指令所需的时间。
进程是资源分配的最⼩单位,线程则是CPU调度的最⼩单位
进程的特点
-
进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都拥有自己私有的地址空间,在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间
(独立性) -
进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合,程序加入了时间的概念以后,称为进程,具有自己的生命周期和各种不同的状态,这些概念都是程序所不具备的
动态性 -
多个进程可以在单个处理器CPU上并发执行,多个进程之间不会互相影响
并发性
线程
线程是操作系统OS能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.一个进程可以开启多个线程,其中有一个主线程来调用本进程中的其他线程。
进程和线程之间的关系
- 进程中的任意⼀线程执⾏出错,都会导致整个进程的崩溃。
- 线程之间共享进程中的一些数据。
- 当⼀个进程关闭之后,操作系统会回收进程所占⽤的内存,当⼀个进程退出时,操作系统会回收该进程所申请的所有资源;即使其中任意线程因为操作不当导致内存泄漏,当进程退出时,这些内存也会被正确回收。
- 进程之间的内容相互隔离。进程隔离就是为了使操作系统中的进程互不⼲扰,每⼀个进程只能访问⾃⼰占有的数据,也就避免出现进程 A 写⼊数据到进程 B 的情况。正是因为进程之间的数据是严格隔离的,所以⼀个进程如果崩溃了,或者挂起了,是不会影响到其他进程的。如果进程之间需要进⾏数据的通信,这时候,就需要使⽤⽤于进程间通信的机制了。
这块比较重要~~~
进程和线程的区别
-
进程是独⽴应⽤,线程则不是。
- 资源:进程是cpu资源分配的最⼩单位(是能拥有资源和独⽴运⾏的最⼩单位);线程是cpu调度的最⼩单位(线程是建⽴在进程的基础上的⼀次程序运⾏单位,⼀个进程中可以有多个线程)。
-
通信⽅⾯:线程间可以通过直接共享同⼀进程中的资源,⽽进程通信需要借助进程间通信。
-
调度:进程切换⽐线程切换的开销要⼤。线程是CPU调度的基本单位,线程的切换不会引起进程切换,但某个进程中的线程切换到另⼀个进程中的线程时,会引起进程切换。
-
系统开销:由于创建或撤销进程时,系统都要为之分配或回收资源,如内存、I/O 等,其开销远⼤于创建或撤销线程时的开销。同理,在进⾏进程切换时,涉及当前执⾏进程 CPU 环境还有各种各样状态的保存及新调度进程状态的设置,⽽线程切换时只需保存和设置少量寄存器内容,开销较⼩。
提到进程一定要提的就是死锁,接下来让我们了解一下死锁的概念和死锁产生的原因。
什么是死锁?
所谓死锁,是指多个进程在运⾏过程中因争夺资源⽽造成的⼀种僵局,当进程处于这种僵持状态时,若⽆外⼒作⽤,它们都将⽆法再向前推进。简言之就是,多个进程同时争夺同一资源导致程序无法推进的一种状态。
产⽣死锁的必要条件:
-
进程要求对所分配的资源进⾏排它性控制,即在⼀段时间内某资源仅为⼀进程所占⽤。
-
当进程因请求资源⽽阻塞时,对已获得的资源保持不放。
-
进程已获得的资源在未使⽤完之前,不能剥夺,只能在使⽤完时由⾃⼰释放。
-
在发⽣死锁时,必然存在⼀个进程——资源的环形链。 总结就是四段话:
1.互斥。 2.请求并保持。 3.非剥夺。 4.环路等待。
预防死锁的方法可以从以上四个方面入手,这里留给大家思考!
以上仅为笔记,若有错误,请大家及时指正。
成功总是留给有准备的人。