啥是进程和线程?

0.啥是并发与并行?

老生常谈了,并发只是在同一时间段一起执行,并行才是真正意义上的同时执行。

举个例子,

某个工厂有三条流水线要生产不同的零件,但是只有一个工人,老板让他一天时间内 每条流水线都生产十个零件,

打工老哥就很辛苦,上午生产流水线1,下午生产流水线2,晚上还得加班去流水线3生产。最后按一天的时间算,看起来好像是三个流水线同时生产了,其实只有老哥一个人 具体的辛苦谁知道? ——并发

另一个工厂就很舒服,三条流水线有三个工人去工作,也是每天每条流水线生产十个零件,每个人只负责自己的 并且可以真正意义上的同时进行生产。 ——并行

像极了互联网打工人现状,目前实际计算机多数时候也都是并发执行调的

(因为cpu资源很昂贵,本着尽可能的压榨cpu的原则,假如单核cpu让他忙起来可以同时并发处理十个任务,那我同一时间最多也就二十个任务,两核cpu的配置不就够了吗,那么贵的cpu我搞那么多 排不满会产生空闲时间我多亏啊,像极了资本)

由于人们日益发展的物质文化需求,cpu也由单核慢慢演变为多处理器,多处理器系统由于可以共享资源,因此可以开源节流,省钱。整个系统的可靠性也随之提高。

1.啥是进程和进程表?

进程就是正在执行程序的实例,比如说 Web 程序就是一个进程,shell 也是一个进程,LoL也是一个进程。

操作系统负责管理所有正在运行的进程,操作系统会为每个进程分配特定的时间来占用 CPU,操作系统还会为每个进程分配特定的资源。

操作系统为了跟踪每个进程的活动状态,维护了一个进程表。在进程表的内部,列出了每个进程的状态以及每个进程使用的资源等。

2.啥是线程?

线程其实就是进程中的单条流向,因为线程具有进程中的某些属性,所以线程又被称为轻量级的进程。浏览器如果是一个进程的话,那么浏览器下面的每个 tab 页可以看作是一个个的线程。

线程不像进程那样具有很强的独立性,线程之间会共享数据

创建线程的开销要比进程小很多,因为创建线程仅仅需要堆栈指针程序计数器就可以了,而创建进程需要操作系统分配新的地址空间,数据资源等,这个开销比较大。

3. 啥是上下文切换?

上下文切换 (Context Switch) 是一种 将 CPU 资源从一个进程分配给另一个进程的机制。(也就是让打工人老哥从流水线1干完去流水线2)

从用户角度看,计算机能够并行运行多个进程,这恰恰是操作系统通过快速上下文切换造成的结果。

在切换的过程中,操作系统需要先存储当前进程的状态 (包括内存空间的指针,当前执行完的指令等等),再读入下一个进程的状态,然后执行此进程。

4.进程终止的几种方式?

执行完正常退出: exit

错误退出: 例如执行linux某个指令 文件不存在,提示错误退出

严重错误: 在编译或运行过程中程序本身发生错误(例如java空指针),进程收到中断信号 终止

被其他进程杀死: 执行的好好的呢 被kill了

5.进程之间的通信方式?

也叫进程之间的并发问题(这名我起的)

竞态条件:多个线程对同意共享数据进行修改 (典型的多线程并发问题)

临界区:禁止一个或多个进程在同一时刻对共享资源(包括共享内存、共享文件等)进行读写。 也就是临界区互斥

  • 消息传递:消息传递是进程间实现通信和同步等待的机制,使用消息传递,进程间的交流不需要共享变量,直接就可以进行通信;消息传递分为发送方和接收方

  • 先进先出队列:先进先出队列指的是两个不相关联进程间的通信,两个进程之间可以彼此相互进程通信,这是一种全双工通信方式

  • 管道:管道用于两个相关进程之间的通信,这是一种半双工的通信方式,如果需要全双工,需要另外一个管道。

  • 直接通信:在这种进程通信的方式中,进程与进程之间只存在一条链接,进程间要明确通信双方的命名。

  • 间接通信:间接通信是通信双方不会直接建立连接,而是找到一个中介者,这个中介者可能是个对象等等,进程可以在其中放置消息,并且可以从中删除消息,以此达到进程间通信的目的。

  • 消息队列:消息队列是内核中存储消息的链表,它由消息队列标识符进行标识,这种方式能够在不同的进程之间提供全双工的通信连接。

  • 共享内存:共享内存是使用所有进程之间的内存来建立连接,这种类型需要同步进程访问来相互保护。

6.进程的状态模型?

  1. 运行态:运行态指的就是进程实际占用 CPU 时间片运行时

  2. 就绪态:就绪态指的是可运行,但因为其他进程正在运行而处于就绪状态

  3. 阻塞态:阻塞态又被称为睡眠态,它指的是进程不具备运行条件,正在等待被 CPU 调度。

逻辑上来说,运行态和就绪态是很相似的。这两种情况下都表示进程可运行,但是第二种情况没有获得 CPU 时间分片。第三种状态与前两种状态不同的原因是这个进程不能运行,CPU 空闲时也不能运行。

转换 2 和转换 3 都是由进程调度程序(操作系统的一部分)引起的,进程本身不知道调度程序的存在。转换 2 的出现说明进程调度器认定当前进程已经运行了足够长的时间,是时候让其他进程运行 CPU 时间片了。

当所有其他进程都运行过后,这时候该是让第一个进程重新获得 CPU 时间片的时候了,就会发生转换 3。

当进程等待的一个外部事件发生时(如从外部输入一些数据后),则发生转换 4。如果此时没有其他进程在运行,则立刻触发转换 3,该进程便开始运行,否则该进程会处于就绪阶段,等待 CPU 空闲后再轮到它运行。

创建进程需要两个步骤:即为新进程分配所需要的资源和空间,设置进程为就绪态,并等待调度执行。

终止一个进程需要两个步骤:

  1. 先等待操作系统或相关的进程进行善后处理。

  2. 然后回收占用的资源并被系统删除。

7.调度算法都有哪些?

调度算法分为三大类:批处理中的调度、交互系统中的调度、实时系统中的调度

批处理中的调度:

先来先服务,队列原理,FIFO先来的进程先调用

最短作业优先,最短作业的每个进程调度的平均用时最少。在所有的进程都可以运行的情况下,最短作业优先的算法才是最优的。

最短剩余时间优先,最短作业优先的抢占式版本,这种方式能够使短期作业获得良好的服务。

交互式系统中的调度:

轮训调度,每个进程都会被分配一个时间段。在这个时间片内允许进程运行。如果时间片结束时进程还在运行的话,则抢占一个 CPU 并将其分配给另一个进程。如果进程在时间片结束前阻塞或结束,则 CPU 立即进行切换。

优先级调度,按照进程优先级调度。但是也不意味着高优先级的进程能够永远一直运行下去,调度程序会在每个时钟中断期间降低当前运行进程的优先级。如果此操作导致其优先级降低到下一个最高进程的优先级以下,则会发生进程切换。或者,可以为每个进程分配允许运行的最大时间间隔。当时间间隔用完后,下一个高优先级的进程会得到运行的机会。(防止富人垄断呗 给穷人点活路)

8.进程调度的性能?

CPU不处于空闲状态的时间百分比  (越尽力压榨cpu,cpu利用率越高)

进程切换的等待时间   

单位时间内完成进程任务的数量

响应时间

原文地址:https://www.cnblogs.com/ttaall/p/14682689.html