阅读更多

22顶
0踩

企业架构

转载新闻 关于进程与线程的简单解释

2013-04-24 17:48 by 副主编 WnouM 评论(7) 有10306人浏览
本文转载自阮一峰的博客。原文内容如下:

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。

最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。

1.  计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。



2.  假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。



3.  进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。



4.  一个车间里,可以有很多工人。他们协同完成一个任务。



5.  线程就好比车间里的工人。一个进程可以包括多个线程。



6.  车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。



7.  可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。



8.  一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫"互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。



9.  还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。



10.  这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做"信号量"(Semaphore),用来保证多个线程不会互相冲突。



不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

11.  操作系统的设计,因此可以归结为三点:

  • 以多进程形式,允许多个任务同时运行;
  • 以多线程形式,允许单个任务分成不同的部分运行;
  • 提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
  • 大小: 49.9 KB
  • 大小: 43 KB
  • 大小: 64.1 KB
  • 大小: 181.1 KB
  • 大小: 15.1 KB
  • 大小: 17 KB
  • 大小: 14.3 KB
  • 大小: 78 KB
  • 大小: 78 KB
  • 大小: 53.5 KB
  • 大小: 13 KB
22
0
评论 共 7 条 请登录后发表评论
7 楼 nTalgar 2013-04-27 02:34
不错!  希望多一点通俗易懂的材料
6 楼 foytien 2013-04-26 14:01
5 楼 geminiyellow 2013-04-25 09:21
lvwenwen 写道
写的不错 

引用
来自: 阮一峰的博客
4 楼 streamone 2013-04-25 09:08
多核CPU的情况呢
3 楼 s929498110 2013-04-24 22:20
这是资讯?
2 楼 lvwenwen 2013-04-24 22:17
写的不错 
1 楼 young7 2013-04-24 18:50
写的不错,那篇材料看起来也很好,不过还没看

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

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

    进程与线程的一个简单解释,教你简单区分程序设计过程中的进程与线程问题,有助于你对多线程编程的理解

  • Delphi欢迎界面的制作

    1.利用计时器frmStart :=TfrmStart.Create(Application ); frmStart.Show ;   //显示启动窗体 for start_i:=0 to 100 do begin   Application.ProcessMessages ; //控制权转让   Sleep(20);//暂停20毫秒 end; frmStart.Free ; frmMain:

  • delphi使用Panel控件布局详解

    转帖自: http://hi.baidu.com/dongfangjunzi/blog/item/abd45c0853d8c7980b7b82a5.html2010年08月07日 星期六 11:53看看下面这个布局模式、上下左右中都有了,看了以后是不是对panel布局有点兴趣了?布局以后可以随窗口大小的变化,而布局部分也随之放大缩小。 <br />      顶部、底部空间左右宽度随窗口大小而变化;<br />      左部、右部空间上下高度随窗口大小而变化;<br />       中部控件则左右、上

  • 移动app界面 布局规则

    所有可操作元素最小点击区域尺寸:48dp X 48dp。 栅格系统的最小单位是8dp,一切距离、尺寸都应该是8dp的整数倍。以下是一些常见的尺寸与距离: 顶部状态栏高度:24dpAppbar最小高度:56dp底部导航栏高度:48dp悬浮按钮尺寸:56x56dp/40x40dp用户头像尺寸:64x64dp/40x40dp小图标点击区域:48x48dp侧边抽屉到屏幕右边的距离:56dp卡片

  • Delphi D10.1 移动开发中APP界面基本布局(一)

    Delphi 目前在移动应用开发上已越来越成熟,其高效、简洁的开发更让人喜欢。 说明案例演示使用Delphi控件完成界面基本布局,其中包括TLayout、TVertScrollBox、 TGridPanelLayout、TTabControl 等控件的基本使用。 本案例仅使用Delphi自身控件实现,为初学APP开发者提供学习帮助。代码下载案例代码已上传到csdn下载区

  • 面板panel与布局layout详解

    一、面板        1.类结构               Ext.Base                      Ext.AbstractComponent                             Ext.Component                                    Ext.container.AbstractContainer

  • 线程与进程,你真得理解了吗

    开始前先看一组非常传神的图例,相信可以帮助你更好理解进程与线程的概念: 1 进程与线程的关系和区别 什么是进程 进程可以说是一个“执行中的程序”。程序是指令、数据及其组织形式的描述,是一个没有生命的实体,...

  • 进程和线程的区别(超详细)

    进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如...与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟...

  • 进程与线程解释

    简单形象的介绍进程与线程,带有图片解说,比较容易理解

  • 进程与线程

    进程与线程 1 进程 1.1 进程的概念 进程就是正在运行的程序,它代表了程序所占用的内存区域 1.2 进程的特点 独立性 进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都拥有自己私有的地址空间,在没有...

  • 线程和进程有什么区别(简单介绍)

     线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源...

  • python进程与线程

    总结了python中如何创建并使用多进程和多线程的主要方法,所有代码都自测成功,用于以后编写代码时复制修改。这是我总结的python代码编写常的有关进程线程的代码。基本功能应该不外呼这10组代码。

  • 进程与线程的关系简单介绍

    对于线程,你可以理解成是一组代码的执行过程,这组代码会完成特定的工作,从这点上说、线程有点奏似函数的作用,但与函数不同之处在于多个线程是同时执行的、不存在一个调用/返回的过程。在单CPU的计算机上、线程的...

  • 进程与线程的简单解释(描述)

    进程与线程的简单解释(描述) 进程(Process)和线程(Thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。 通俗描述进程与线程 1.计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在...

  • python多进程与多线程

    进程程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位,通俗理解:一个正在运行的程序就是一个进程。例如:正在运行的qq,微信等他们都是一个进程

  • 进程与线程详解

    本文章是对线程进程的一些总结,同时对多线程也有一个初步的认识,欢迎大家前来一起学习。

  • C++多线程----进程与线程区别

    同步互斥原理以及多进程和多线程中实现同步互斥的两种方法Qt中的多线程应用 引入 传统的C++(C++98)中并没有引入线程这个概念。linux和unix操作系统的设计采用的是多进程,进程间的通信十分方便,同时进程之间互相...

  • 进程与线程的关系

    线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。2.线程是进程的一部分,一个...

  • 操作系统:进程与线程大解析

    有名管道不同于匿名管道之处在于它提供了一个路径名与之关联,以有名管道的文件形式存在于文件系统中,这样,即使与有名管道的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过有名管道相互通信,...

  • 进程线程与IO

    参考: 《计算机组成原理》白中英 《操作系统》左万历 《计算机网络》谢希仁 《Unix网络编程》W....《深入浅出Nodejs》朴灵 ...http://c.biancheng.net/view/1220.html 多线程模型 https://zhuanlan.zhihu.com/p/2348886.

Global site tag (gtag.js) - Google Analytics