一文理解进程与线程 ---操作系统

Posted waibizi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文理解进程与线程 ---操作系统相关的知识,希望对你有一定的参考价值。

进程与线程

 

进程:

技术图片

 

百度百科的定义:   进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

个人理解: 进程是可并发程序执行的时候的一个实例。从内核的观点看,进程的目的就是分配系统资源(CPU时间,内存等)和调度的基本单位

 

线程:

百度百科的定义:   线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

个人理解:       线程是进程中的一个实体,是系统分配处理器时间资源的基本单元,是程序执行的最小单位。

 

进程VS线程:

操作系统实际运行的是线程,进程只是一个容器。

线程是操作系统进行运行调度的最小单位。

包含在进程之中,是进程中实际运行工作的单位。

一个进程可以并发多个线程,每个线程执行不同任务。

 

 

进程

线程

资源

资源分配的基本单位

不拥有资源

调度

独立调度的基本单位

独立调度的最小单位

系统开销

进程系统开销大

线程系统开销小

通信

进程IPC

读写同意进程数据通信

注:是指在不同进程之间传播或交换信息。是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。

IPC的方式通常有管道(PIPE)(包括无名管道和命名管道)、消息队列、信号量、共享内存、套接字(Socket)、Streams、旗语等。其中 Socket和Streams支持不同主机上的两个进程IPC。

 

线程与进程的区别可归纳为以下4点:

1)  地址空间和其他资源:进程之间相互独立,同一进程的各线程间共享。某进程内的线程在其他进程不可见。

2)  通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信

------需要进程和互斥的辅助,保证数据的一致性。

3)  调度和切换:线程上下文切换比进程上下文切换要快得多。

4)  在多线程OS中,进程不是一个可执行的实体。

 

详解进程:   

技术图片

上图是任务管理器中的进程(通过此图我们可以更容易理解进程)

进程通常是由程序,数据和进程控制块组成(PCB)组成。

  1. PCB:PCB是进程存在的唯一标志;用于描述和控制进程运行的通用数据结构;记录进程当前状态和控制进程运行的全部信息;PCB使得进程是能够独立运行的基本单位。
  2. 程序:程序部分描述了进程需要完成的功能
  3. 数据:数据部分包括程序执行时所需的数据及工作区。

 

PCB(程序控制块)内容:(主存中的进程形态)

标识符:标识符唯一标记一个进程,用于区别其他进程。

状态:标记进程的进程状态,如运行态,阻塞状态。

程序计数器:进程即将被执行的下一条指令的地址。

内存指针:程序代码,进程数据相关的指针。

上下文数据:进程执行时处理器存储的数据。

IO状态信息:被进程IO操作所占用的文件列表

记账信息:使用处理器时间,时钟数总和等。

以上几点可归纳为:进程标识符,处理机状态,进程调度信息,进程控制信息。

 

进程的三态模型

三种基本状态:运行,就绪和阻塞

运行:当一个进程在处理机上运行时,则称该进程处于运行状态。

阻塞:阻塞也成等待或睡眠状态,一个进程正在等待某一件事发生(例如请求I/O完成等)。

就绪:一个进程获得了除处理机外的一切资源,一旦得到处理机即可运行。

技术图片

 

五态模型

技术图片

 

线程详解

进程想要执行任务就需要依赖线程,一个进程至少有一个线程

 

多线程:想要理解多线程,先知道串行和并行

串行:所谓的串行就是按照一定的顺序去进行的,如下图所示,当任务A没有完成时,任务B没办法执行

技术图片

 

 

并行:可以同时进程多个任务,如下图

技术图片

那究竟什么是多线程呢

 

我们拿一个安全软件来举个例子哦,如果说开启这个软件,即我们创建了一个进程,

但是如果是单线程的话,那么我们这个杀毒软件在杀毒的时候就不能边清理垃圾。

但是如果是多线程的话,可以边杀毒,边清理垃圾等等,这个是严格意义上的同一时刻发生的,没有执行的先后顺序。

以上是关于一文理解进程与线程 ---操作系统的主要内容,如果未能解决你的问题,请参考以下文章

一文理解OpenStack网络

一文理解二叉树的遍历

一文理解logback

一文到底,全面理解支持向量机

上帝视角一文理解JavaScript原型和原型链

一文理解 DDD 领域驱动设计!