美文网首页
对线程和进程的解释

对线程和进程的解释

作者: 汨罗在北方 | 来源:发表于2017-08-15 14:39 被阅读4次

之前老是忘了线程和进程的关系,今天特地查了下,发现阮一峰博客里对这个问题的解释很精妙,用工厂车间比喻进程,用工人比喻线程。

进程与线程的一个简单解释

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

其中对于内存不能共用的协调机制使用了房间门锁的机制比喻。只能单线程用的是互斥锁(Mutual exclusion,缩写 Mutex),只能有限线程用的是信号量(Semaphore)。

但因为比喻对线程在cpu调度机制解释不清楚,也有人明确了一下:

进程和线程简单而基本靠谱的定义如下:

  1. 进程:程序的一次执行
  2. 线程:CPU的基本调度单位

抛开各种技术细节,从应用程序角度讲:

  • 1、在单核计算机里,有一个资源是无法被多个程序并行使用的:cpu。
    没有操作系统的情况下,一个程序一直独占着全都cpu。
    如果要有两个任务来共享同一个CPU,程序员就需要仔细地为程序安排好运行计划--某时刻cpu和由程序A来独享,下一时刻cpu由程序B来独享
    而这种安排计划后来成为OS的核心组件,被单独名命为“scheduler”,即“调度器”,它关心的只是怎样把单个cpu的运行拆分成一段一段的“运行片”,轮流分给不同的程序去使用,而在宏观上,因为分配切换的速度极快,就制造出多程序并行在一个cpu上的假象。
  • 2、在单核计算机里,有一个资源可以被多个程序共用,然而会引出麻烦:内存。
    在一个只有调度器,没有内存管理组件的操作系统上,程序员需要手工为每个程序安排运行的空间 -- 程序A使用物理地址0x00-0xff,程序B使用物理地址0x100-0x1ff,等等。
    然而这样做有个很大的问题:每个程序都要协调商量好怎样使用同一个内存上的不同空间,软件系统和硬件系统千差万别,使这种定制的方案没有可行性。
    为了解决这个麻烦,计算机系统引入了“虚拟地址”的概念,从三方面入手来做:
    • 2.1、硬件上,CPU增加了一个专门的模块叫MMU,负责转换虚拟地址和物理地址。
    • 2.2、操作系统上,操作系统增加了另一个核心组件:memory management,即内存管理模块,它管理物理内存、虚拟内存相关的一系列事务。
    • 2.3、应用程序上,发明了一个叫做【进程】的模型,(注意)每个进程都用【完全一样的】虚拟地址空间,然而经由操作系统和硬件MMU协作,映射到不同的物理地址空间上。不同的【进程】,都有各自独立的物理内存空间,不用一些特殊手段,是无法访问别的进程的物理内存的。
  • 3、现在,不同的应用程序,可以不关心底层的物理内存分配,也不关心CPU的协调共享了。然而还有一个问题存在:有一些程序,想要共享CPU,【并且还要共享同样的物理内存】,这时候,一个叫【线程】的模型就出现了,它们被包裹在进程里面,在调度器的管理下共享CPu,拥有同样的虚拟地址空间,同时也共享同一个物理地址空间,然而,它们无法越过包裹自己的进程,去访问别一个进程的物理地址空间。
  • 4、进程之间怎样共享同一个物理地址空间呢?不同的系统方法各异,符合posix规范的操作系统都提供了一个接口,叫mmap,可以把一个物理地址空间映射到不同的进程中,由不同的进程来共享。
  • 5、PS:在有的操作系统里,进程不是调度单位(即不能被调度器使用),线程是最基本的调度单位,调度器只调度线程,不调度进程,比如VxWorks

相关文章

  • 进程管理

    进程管理进程和线程图形简单解释进程和线程管理VIM编辑Linux 系统资源信息的获取获取 Linux CPU 信息...

  • 进程和线程

    参考资料 进程与线程的一个简单解释 1. 举例说明线程和进程的关系 具体图例见:进程与线程的一个简单解释 CPU ...

  • iOS 多线程理解

    一、iOS中常见的多线程方案 要解释多线程,需要先解释进程和线程之间的区别。线程才是程序真正的执行单元,一个进程可...

  • 读《Java多线程编程核心技术 》

    1Java多线程技能 讲到多线程技术,我们就不得不提及“进程”和“线程”的概念,“百度百科”里对“进程”的解释如...

  • Python中的线程与进程

    进程会启动一个解释器进程,线程共享一个解释器进程 Python的线程开发 python的线程开发使用标准库thre...

  • vue面试题第十天

    1线程和进程得区别 什么是进程(Process):普通的解释就是,进程是程序的一次执行 什么是线程(Thread)...

  • 进程与线程、线程池

    进程与线程的相关总结进程与线程的简单解释进程: 基本的资源分配资源线程: 最小调度单元 线程安全 线程安全是多线程...

  • 对线程和进程的解释

    之前老是忘了线程和进程的关系,今天特地查了下,发现阮一峰博客里对这个问题的解释很精妙,用工厂车间比喻进程,用工人比...

  • Java并发编程(一):进程和线程

    1 概述 下面是维基百科上对进程和线程的解释: 进程(英语:process),是指计算机中已运行的程序。进程为曾经...

  • 2018-03-29 理解多线程和多进程

    我之前一直把线程和进程搞混,今天准备好好整理一下。 官方解释——什么是进程,什么是线程? 进程(Process)是...

网友评论

      本文标题:对线程和进程的解释

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