美文网首页
进程与线程

进程与线程

作者: Hard模式 | 来源:发表于2018-08-21 21:22 被阅读0次

    背景

    Long Long Ago,计算机一次只能处理一个程序,如果有多个程序任务需要执行的时候,必须排队等待,前一个完毕后,后续程序才能被加载到内存中执行。这就是所谓的串行处理。
    后来的计算机允许同时加载多个程序到内存中执行。为了调度多个程序的同时执行,引入了一些新概念,进程和线程就包含其中。

    进程

    进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。
    (若不支持线程机制,进程是系统调度的单位。否则,线程是系统调度的单位)。

    简单来说,操作系统之前只用管理一个程序,执行完后换下一个;现在要同时管理多个程序,就通过进程去做,每个进程内部的结构和此前的单任务一样,这样只要管理好多个进程就可以了,不用太关心进程内部的细节。

    特点

    • 进程是程序的一次执行过程。若程序执行两次甚至多次,则需要两个甚至多个进程。
    • 进程是是正在运行程序的抽象,也称进程是对CPU的抽象(想象以前的单任务串行模式)。
    • 内存等系统资源以进程为单位分配。
    • 拥有独立的地址空间,一个进程崩溃,不影响其他进程的执行。
    • 操作系统通过“调度”把控制权交给进程。

    在实际应用中,进程有这样的问题:

    1. 进程切换的代价、开销比较大;
    2. 进程内也有并发的需求,来实现不同的功能。
    3. 进程有时候性能比较低。

    线程

    引入线程有以下三个方面的考虑

    • 应用的需要。
      比如打开一个浏览器,用户希望一边浏览网页,一边下载文件,一边播放音乐。如果一个浏览器是一个进程,那么这样的需求需要线程机制。
    • 开销的考虑。
      在进程内创建、终止线程比创建、终止进程要快。同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。线程之间相互通信无须通过内核(同一进程内的线程共享内存和文件)
    • 性能的考虑。
      多个线程中,任务功能不同(有的负责计算,有的负责I/O),如果有多个处理器,一个进程就可以有很多的任务同时在执行。

    线程的特点

    • 有标识符ID
    • 有状态及状态转换,所以需要提供一些状态转换操作
    • 不运行时需要保存上下文环境,所以需要程序计数器等寄存器
    • 有自己的栈和栈指针
    • 共享所在进程的地址空间和其它资源

    补充

    以前的计算机中只有一个CPU,为了同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。
    如果一台计算机有多个CPU,情况就不同了,如果进程数小于CPU数,则不同的进程可以分配给不同的CPU来运行,这样,多个进程就是真正同时运行的,这便是并行。但如果进程数大于CPU数,则仍然需要使用并发技术。

    操作系统的设计,因此可以归结为三点:
    (1)以多进程形式,允许多个任务同时运行;
    (2)以多线程形式,允许单个任务分成不同的部分运行;
    (3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

    在运行于32位处理器上的32位Windows操作系统中,可将一个进程视为一段大小为4GB(232字节)的线性内存空间,它起始于0x00000000结束于0xFFFFFFFF。这段内存空间不能被其他进程所访问,所以称为该进程的私有空间。这段空间被平分为两块,2GB被系统所有,剩下2GB被用户所有。
    如果有N个进程运行在同一台机器上,那么将需要N×4GB的海量RAM,还好事实并非如此。
    Windows是按需为每个进程分配内存的,4GB是32位系统中一个进程所占空间的上限。
    将进程所需的内存划分为4KB大小的内存页,并根据使用情况将这些内存页存储在硬盘上或加载到RAM中,通过系统的这种虚拟内存机制,我们可以有效地减少对实际内存的需求量。当然这些对用户和开发者来说都是透明的。

    线程只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。
    应用程序(application)是由一个或多个相互协作的进程组成的。例如,Visual Studio开发环境就是利用一个进程编辑源文件,并利用另一个进程完成编译工作的应用程序。

    相关文章

      网友评论

          本文标题:进程与线程

          本文链接:https://www.haomeiwen.com/subject/yvjlvftx.html