大家好,久违了,我是大成子。前段时间因为疫情,自己有些松散,没有进行学习。现在我们恢复正常学习和文章更新。本次学习将对进程和线程有一个初步的认识,理解其产生的原因,定义,算是开篇的一个理论知识点,后面我们将一步步实践学习。
背景知识
一个程序要能够在计算机中进行运行,除了程序本身必须是机器可执行的目标代码之外,还要有相应的数据。程序和数据还要提前存储在存储器中,即需要把一定的存储空间分配给这个程序和数据。另外,在执行该程序前,处理器中的指令计数器必须指向存储器中被执行程序的首地址。如果有多个程序要进入内存并运行,那么每个运行的程序也需要准备程序代码,数据,资源信息以及保存这些东西的存储空间。为了在技术上能够准确的描述正在运行,将要运行或者刚刚退出运行的各个程序的执行代码等信息,我们引入了进程这个概念。
程序的顺序执行与并发执行
程序是一个在时间上按照严格次序前后相继的操作序列,这些操作是机器指令或高级语言编写的语句。一个具有独立功能的程序独占处理器直到得到最终结果的过程称为程序的顺序执行。
而两个或者两个以上程序在计算机系统当中,同时处于已经开始执行且尚未结束的状态,我们称为程序的并发执行。程序的并发执行,可以充分利用系统的资源,提高计算机的处理能力。
并发程序和顺序程序的执行有本质的差异,为了能更好的描述程序的并发执行,实现操作系统的并发性和共享性,引入了“进程”这个概念。
进程
进程是具有一定独立功能的程序在某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
进程可以分为系统进程和用户进程。系统进程是操作系统一些相关必要的程序,完成操作系统的某些功能;用户进程则是直接为用户服务,运行用户的程序。系统进程优先级一般高于用户进程的优先级。
进程和程序的区别和联系
联系:程序是构成进程的组成部分之一,一个进程的运行目标就是执行它所对应的程序,如果没有程序,进程就失去了存在的意义。静态角度看,进程是由程序,数据和进程控制块(PCB,Process Control Block,用于系统中控制和描述进程的活动过程的一个专门的数据结构)三部分组成的。
区别:进程是程序的一个执行过程。程序是静态的,而进程是动态的。程序的存在是永久的(不考虑关机等其他因素或人为终止一个程序),而进程是为了程序的一次执行而暂时存在的,进程有生命周期,会产生也会消失。一个程序可以产生多个进程,一个进程也可以执行多个程序。
进程可以创建其他的进程,被创建的进程称为子进程,创建者称为父进程。
进程的特性
并发性。一个进程可以同其他进程一起向前推进,即一个进程的第一个动作可以在另一个进程的最后一个动作结束之前就开始。
动态性。进程具有生命周期,在其生命周期当中,它的状态也是不断在变化的。(进程有三种状态:运行,就绪,等待)
独立性。一个进程是一个相对完整的资源分配单位。
交往性。一个进程在运行的过程中可能会与其他的进程发生直接或间接的相互作用。
异步性。每个进程按照各自独立的,不可预知的速度向前推进。
结构性。一个进程由程序,数据和进程控制块构成。
进程的并发执行基础
(1)进程是一个可拥有独立资源的独立单位;
(2)进程同时又是一个可以独立调度和分派的基本单位。
线程
随着科技的进步,计算机系统软硬件日益强大,人们于是提出了比进程更小的,能够独立运行的基本单位:线程。线程可以提高系统内程序并发执行的级别,可以进一步提高系统的效率。
在操作系统中引入进程,是为了使多个程序并发执行,以改善资源利用率和提高系统的效率;而引入线程,则是为了减少程序并发执行所付出的空间和时间开销,使操作系统具有更好的并发性。
线程是进程中的一个实体,是处理器调度和分派的基本单位。线程自己基本上不拥有系统资源,只拥有少量的在运行当中必不可少的资源(如程序计数器,一组寄存器和栈等等),但他可与同属一个进程的其他线程共享进程所拥有的全部资源。【一般而言,线程自己并不拥有自己的系统资源,但它可以访问其隶属进程的资源。比如一个进程的代码段,数据段,或者相关的系统资源(比如已经打开的文件,分配使用的I/O设备等等),总之,一个进程中的资源可以供它属下的所有线程共享】同一个进程中的多个线程之间可以并发执行。
线程的一些属性
(1)不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,系统可以为它们创建不同的线程。
(2)同一个进程中的各个线程共享该进程的内存地址空间,各个线程之间的通信和同步的实现比较容易。线程之间的切换对操作系统的开销要远远低于进程之间的切换。
(3)线程是处理器的独立调度单位,多个线程是可以并发执行的。在单处理器的计算机系统中,各线程可交替占用处理器;在多处理器的计算机系统中,各个线程可同时占用不同的处理器;假如各个处理器同时为一个进程的各线程服务,则可缩短进程的处理时间。
不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,因而使操作系统具有更好的并发性,从而更有效的使用系统资源和提高系统的吞吐量。
(4)一个线程在被创建后便开始了它的生命周期,直到消亡。
好了,今天的学习知识点就到这里了,可能有些无聊,但理解着去学习,将对我们后面的实践有很大的帮助和体会。有错误的地方欢迎指出和交流,再见。