天天看点

进程线程相关概念

提到进程线程就不得不把他们的父老乡亲都拉出来问候一下。

首先是程序(计算机程序)

百度百科中定义程序为一组计算机能识别和执行的指令,运行于计算机上,满足人们某种需求的信息化工具。

通俗点讲程序就是可以让CPU完成指定任务的指令序列,而作为一个程序员程序可以简单的将其看做使用编程语言实现得到的数据结构和算法有机结合。

即程序 = 数据结构 + 算法

为了方便区分,我将程序理解为一个静态的概念,不管计算机运行与否,程序就在那里不增不减。没有启动的时候程序就是和数据类似的储存在计算机中的一串串01。

在这个定义中程序只包含了数据结构和算法,为了让程序运行,一些基本的数据会在代码中直接设定好,而实质上有一些特定的应用场景下还需要额外的数据程序才能够跑起来(比较典型的例子就是机器学习算法训练),为了方便管理操作系统的管理这样就引入了一个关于计算机中程序运行的概念进程

百度百科中对进程的定义是计算机中一个具有独立功能的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

进程是一个动态的概念。在操作系统里面,进程就是一个分配了数据设备等资源可以执行的程序体,也即

进程 = 程序 + 数据 + 进程控制块(PCB)

借用一下相亲的场景,程序可以相当于适龄青年,但平时由于缺少房子车子和票子(数据)只能保持冷静,当他(她)挣够了米(分配了数据),拿到了PCB,这个PCB就相当于爱的号码牌,他就可以开始相亲了,但是开始相亲不一定就马上能脱单,还得排队,脱了单也不一定能结婚,还有可能分手,分了手也不一定GG,还有可能复合。也即进程还拥有等待、阻塞、执行、就绪等状态。

进程是程序运行的实例,一个程序可能有多个进程。一段程序代码每执行一次都会创建一个新的进程。

那线程是什么呢?线程是操作系统能够运算调度的最小单位。可以看做进程里面独立运行的子任务,进程负责向系统申请资源,多个线程共用这些资源来完成分立的不同任务。

这里就要提到两个性质并发性和并行性

并发性:一个处理机同时应对多个任务的能力。

并行性:多个处理机同时处理多个任务的能力。

具体理解可以参考这篇

并发性的实现就可以通过多线程技术。

打一个不恰当的比方,幼稚园有一整个班10个孩子在哭闹等着哄,并发相当于只有一个老师,这个老师先每个孩子哄2分钟让孩子们的哭声小一点,然后重复这个过程直到每个孩子都哄好为止;并行就相当于有10位老师,每个老师哄一个孩子最好把孩子哄好。同样都能够完成所有的任务。第一位老师哄每一个孩子的时候就相当于在进行当下的线程,10个孩子就有10个线程任务,两种方式最终都能够完成任务。

继续阅读