什么是进程?什么是线程?

189 阅读5分钟

前言

今天带来一些进程与线程的相关概念。


接下来让我们步入正题:

我对进程和线程的理解就是工作时段的一个描述

  • 进程描述了 CPU 在运⾏指令及加载和保存上下⽂所需的时间,放在应⽤上来说就代表了⼀个程序的执行。

  • 线程是比进程中的更⼩单位,描述了执⾏⼀段指令所需的时间。

进程是资源分配的最⼩单位,线程则是CPU调度的最⼩单位

进程的特点

  • 进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都拥有自己私有的地址空间,在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间(独立性)

  • 进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合,程序加入了时间的概念以后,称为进程,具有自己的生命周期和各种不同的状态,这些概念都是程序所不具备的动态性

  • 多个进程可以在单个处理器CPU上并发执行,多个进程之间不会互相影响并发性

线程

线程是操作系统OS能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.一个进程可以开启多个线程,其中有一个主线程来调用本进程中的其他线程。

进程和线程之间的关系

  • 进程中的任意⼀线程执⾏出错,都会导致整个进程的崩溃。
  • 线程之间共享进程中的一些数据。
  • 当⼀个进程关闭之后,操作系统会回收进程所占⽤的内存,当⼀个进程退出时,操作系统会回收该进程所申请的所有资源;即使其中任意线程因为操作不当导致内存泄漏,当进程退出时,这些内存也会被正确回收。
  • 进程之间的内容相互隔离。进程隔离就是为了使操作系统中的进程互不⼲扰,每⼀个进程只能访问⾃⼰占有的数据,也就避免出现进程 A 写⼊数据到进程 B 的情况。正是因为进程之间的数据是严格隔离的,所以⼀个进程如果崩溃了,或者挂起了,是不会影响到其他进程的。如果进程之间需要进⾏数据的通信,这时候,就需要使⽤⽤于进程间通信的机制了。

这块比较重要~~~

进程和线程的区别

  • 进程是独⽴应⽤,线程则不是。

    • 资源:进程是cpu资源分配的最⼩单位(是能拥有资源和独⽴运⾏的最⼩单位);线程是cpu调度的最⼩单位(线程是建⽴在进程的基础上的⼀次程序运⾏单位,⼀个进程中可以有多个线程)。
  • 通信⽅⾯:线程间可以通过直接共享同⼀进程中的资源,⽽进程通信需要借助进程间通信。

  • 调度:进程切换⽐线程切换的开销要⼤。线程是CPU调度的基本单位,线程的切换不会引起进程切换,但某个进程中的线程切换到另⼀个进程中的线程时,会引起进程切换。

  • 系统开销:由于创建或撤销进程时,系统都要为之分配或回收资源,如内存、I/O 等,其开销远⼤于创建或撤销线程时的开销。同理,在进⾏进程切换时,涉及当前执⾏进程 CPU 环境还有各种各样状态的保存及新调度进程状态的设置,⽽线程切换时只需保存和设置少量寄存器内容,开销较⼩。


提到进程一定要提的就是死锁,接下来让我们了解一下死锁的概念死锁产生的原因

什么是死锁?

所谓死锁,是指多个进程在运⾏过程中因争夺资源⽽造成的⼀种僵局,当进程处于这种僵持状态时,若⽆外⼒作⽤,它们都将⽆法再向前推进。简言之就是,多个进程同时争夺同一资源导致程序无法推进的一种状态。

产⽣死锁的必要条件:

  • 进程要求对所分配的资源进⾏排它性控制,即在⼀段时间内某资源仅为⼀进程所占⽤。

  • 当进程因请求资源⽽阻塞时,对已获得的资源保持不放。

  • 进程已获得的资源在未使⽤完之前,不能剥夺,只能在使⽤完时由⾃⼰释放。

  • 在发⽣死锁时,必然存在⼀个进程——资源的环形链。 总结就是四段话:

1.互斥。 2.请求并保持。 3.非剥夺。 4.环路等待。

预防死锁的方法可以从以上四个方面入手,这里留给大家思考!


以上仅为笔记,若有错误,请大家及时指正。

成功总是留给有准备的人。