进程与线程

来源:互联网 发布:0基础英语知乎 编辑:程序博客网 时间:2024/06/05 00:16
一、进程
    1、进程的定义
        进程是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元。
  • 进程是程序在处理器上的一次执行过程。
  • 进程是可以和别的进程并行执行的计算。
  • 进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。
  • 进程可以定义为一个数据结构及能在其上进行操作的一个程序。
  • 进程是一个程序关于某个数据集合在处理器上顺序执行所发生的活动。
    2、进程一般有三种状态:就绪状态、执行状态和阻塞状态(等待状态)。
    3、进程只能由父进程建立,系统中所有的进程形成一种“进程树”的层次关系。
    4、进程可以拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。处在同一个进程中的所有线程都可以访问该进程所包含的地址空间。
    5、进程的特征:
        ①动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。
        ②并发性:任何进程都可以和其他进程一起并发执行。
        ③独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
        ④异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。

二、线程
    1、线程是进程中包含的一个或多个执行单元。是进程中的一个实体,作为系统调度和分配的基本单位。Linux中的线程看成是轻量级的进程。
    2、线程是进程内的一个相对独立的可执行单元。
    3、线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。
        Tips:一个程序至少有一个进程,一个进程至少有一个线程。
    4、进程是被分配并拥有资源的基本单位。同一个进程中的所有线程共享该进程的资源。但线程并不拥有该资源,只是能使用这些资源。
        Tips:线程是操作系统中的基本调度单元,因此线程中应包含 调度所需的必要信息,并且在生命周期中有状态的变化。
    5、由于线程共享资源,所以线程见需要通信和同步机制,并且 必要时 线程也可以创建其他线程;但线程间不存在父子关系。

三、进程控制块(PCB)
    1、每个进程均有一个PCB,它是一个既能标识进程的存在、又能刻画执行瞬间特征的数据结构。当进程被创建时,系统为它申请和构造一个相应的PCB。
    2、PCB可以记录进程的属性信息, 以便操作系统对进程进行控制和管理;
    3、PCB标志着进程的存在。操作系统根据系统中是否有该进程的PCB而知道该进程的存在与否。
         系统创建进程的同时也建立该进程的PCB,在撤销一个进程时,也就撤销其PCB。故进程的PCB是进程存在的具体的物理标志和体现。
    4、一般,PCB包含这三类信息:进程标识信息、处理器状态信息、进程控制信息。
    5、由程序段、相关数据段和PCB三部分构成了进程实体,简称“进程”。

四、多线程
    1、多线程使用的情形:
        ①前台和后台工作情况
        ②异步处理工作情况
        ③需要加快执行速度的情况
        ④组织复杂工作的情况
        ⑤同时有多个用户服务请求的情况
    2、多线程运行在同一个进程的相同的地址空间内。
        多线程的优点:
            ①创建和撤销线程的开销比进程要少。
                创建线程只需要建立线程控制表相应的表目或有关队列;而创建进程时,要创建PCB表和初始化,进入有关进程队列,建立他的地址空间和所需资源等。
            ②CPU在线程之间开关时的开销远比进程要少得多。
                因为开关线程都在同一地址空间内,只需要修改线程控制表或队列,不涉及地址空间和其他工作。
            ③线程机制也增加了通讯的有效性。
                进程间的通讯往往要求内核参与,以提供通讯机制和保护机制。而线程间的通讯是在同一进程的地址空间内,共享内存和文件,无需内核参与。

五、进程与线程 对比
    1、地址空间
           ①线程是进程内的一个执行单元;
           ②进程至少有一个线程,这些线程共享进程的地址空间;
           ③进程有自己独立的地址空间
    2、资源拥有
           ①进程是拥有和分配资源的基本单位,同一进程内的线程共享该资源。
    3、线程是处理器调度的基本单位,但进程不是;
    4、二者均可并发执行。

六、进程间的通信方式
    1、管道:即“无名管道”,一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。
        Tips:进程的亲缘关系通常指父子进程关系。
    2、有名管道:同管道,但允许无亲缘关系的进程间的通信。
    3、高级管道:将另一个程序当做一个新的进程在当前程序中启动,则它算是当前进程的子进程。
    4、信号量:主要作为进程间以及同一进程内不同线程之间的同步手段。
    5、消息队列:
    6、信号:一种比较复杂的通信方式,用于通知接收进程 某个事件已经发生。
    7、共享内存:通常与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
    8、套接字(Socket):与其他通信机制不同的是,它可用于不同机器间的进程通信。