iOS学习重要知识点整理02-进程和线程的一个简单解释
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
- 上一篇:熵的社会学意义
- 下一篇:字符串匹配的KMP算法
分类:
- 理解计算机
进程与线程的一个简单解释
作者: 阮一峰
日期: 2013年4月24日
进程(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.
操作系统的设计,因此可以归结为三点:
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
(完)
文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
- 发表日期: 2013年4月24日
- 更多内容: 档案 » 理解计算机
- 购买文集: 《如何变得有思想》
- 社交媒体: twitter, weibo
- Feed订阅:
相关文章
- 2015.07.16: 图解 Monad
函数式编程有一个重要概念,叫做Monad。
- 2014.11.11: 编译器的工作过程
源码要运行,必须先转成二进制的机器码。这是编译器的任务。
- 2014.09.07: 数据压缩与信息熵
1992年,美国佐治亚州的WEB Technology公司,宣布做出了重大的技术突破。
- 2014.07.04: 数据库的最简单实现
所有应用软件之中,数据库可能是最复杂的。
广告(购买广告位)
留言(82条)
herodot 说:
阮兄,
我是你的博客(包括你的英文BLOG)的忠实读者。这个回复纯属技术探讨。
你这篇关于进程和线程的文章,图文并茂,很通俗,但不易懂。坦白说,在我看来很多比喻很不恰当,比如:
1. 车间/电力/人三者,来比喻进程/CPU/线程三者,其实既没有体现出进程作为程序的一次执行(有独立的内存空间)这一特点,也没有体现出线程作为CPU调度单位这一特点。人和电力的关系是什么呢?所以“车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的”,这句话就很难理解。
2. 用厕所容量,来比喻锁,也不合适。因为线程间同步是为了防止竞争(就是说因同时修改,而导致的数据不一致)。本质上讲,进程的内存空间是天然独立的,线程的内存空间是天然共享的。正因为如此,进程通信/线程同步才是系统编程的很大一块内容。
进程和线程简单而基本靠谱的定义如下:
1. 进程:程序的一次执行
2. 线程:CPU的基本调度单位
这两个概念虽然过于简单,但是完全可以为理解OS/线程/进程打下坚实的基础,我认为关于进程/线程的探讨,无论采用何种方式,都必须以这两句话为落脚点,才算靠谱。
你写的大多数文章相当出色。在以通俗的方式解释复杂的概念这方面,尤其出色。但是,我个人的经验,这种方式比较适合用来解释一个复杂概念的一个方面,或者从某个角度的理解。想面面俱到的说明白一个复杂的系统,繁琐枯燥的概念,以及这些概念间的推演几乎不可避免。坦白说,在实际项目中大量用到线程/进程之前,我看过很多遍相关的概念,也写过小的示例程序,但真到了用的时候,还是发现之前没搞明白。
我对进程/线程的理解也很粗浅。个人见解,仅供参考。
2013年4月24日 11:57 | ∞ | 引用
GameXG 说:
>>假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。
>>进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。
>>一个车间里,可以有很多工人。他们协同完成一个任务。
>>线程就好比车间里的工人。一个进程可以包括多个线程。
文章的意思是同一个进程的多个线程是同时执行的,cpu的调度单位是进程。但实际是错误的,cpu的调度单位是线程,一次只能执行一个线程(当然多核的有几核就能同时执行几个线程),而不是一次执行一个进程!
2013年4月24日 14:21 | ∞ | 引用
viho_he 说:
抛开各种技术细节,从应用程序角度讲:
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
2013年4月24日 14:53 | ∞ | 引用
selfcontrol 说:
引用herodot的发言:你写的大多数文章相当出色。在以通俗的方式解释复杂的概念这方面,尤其出色。但是,我个人的经验,这种方式比较适合用来解释一个复杂概念的一个方面,或者从某个角度的理解。想面面俱到的说明白一个复杂的系统,繁琐枯燥的概念,以及这些概念间的推演几乎不可避免。坦白说,在实际项目中大量用到线程/进程之前,我看过很多遍相关的概念,也写过小的示例程序,但真到了用的时候,还是发现之前没搞明白。
握手,比喻确实浅显易懂,但是很容易导致谬误。
另外,这篇文章是作者转贴的,不是他原创的。
2013年4月24日 15:15 | ∞ | 引用
Tux 说:
引用GameXG的发言:文章的意思是同一个进程的多个线程是同时执行的,cpu的调度单位是进程。但实际是错误的,cpu的调度单位是线程,一次只能执行一个线程(当然多核的有几核就能同时执行几个线程),而不是一次执行一个进程!
对,这样解释其实更容易误解。进程和线程的区别其实也没那么明显,像linux里面就只有一个task,当然也可以根据不同task间共享数据的多少来区分是否线程,不过似乎没什么必要。
2013年4月24日 16:34 | ∞ | 引用
阮一峰 说:
引用herodot的发言:你这篇关于进程和线程的文章,图文并茂,很通俗,但不易懂。坦白说,在我看来很多比喻很不恰当
进程和线程简单而基本靠谱的定义如下:
1. 进程:程序的一次执行
2. 线程:CPU的基本调度单位
我完全同意你对进程和线程的定义。
这篇文章的比喻,确实不是完全准确。但是,进程和线程要找到现实生活中准确的对应,恐怕很困难吧。
我的基本想法是:
(1)进程是一个容器。
(2)线程是容器中的工作单位。
车间—工人的比喻就是这样来的。
2013年4月24日 16:47 | ∞ | 引用
herodot 说:
引用阮一峰的发言:我完全同意你对进程和线程的定义。
这篇文章的比喻,确实不是完全准确。但是,进程和线程要找到现实生活中准确的对应,恐怕很困难吧。
我的基本想法是:
(1)进程是一个容器。
(2)线程是容器中的工作单位。
车间—工人的比喻就是这样来的。
确实,对于一个复杂点的系统来说,在现实中找到完全对位的例子很难。这也是我前面回复中提到的,类比这种表达方式,贵在准而不在全。用一个生活中的例子,捕获到复杂系统一个侧面,就足够了。想完全对位,取舍之后,往往会很牵强,失去通俗易懂的目的。
我大概浏览了一下你所参考的原文(原文很长,我英文一般,可能理解的不完整),发现原文重点讲述了三个方面:
1. 进程与线程的关系
2. 线程间的关系
3. 线程与CPU (核心)的关系
而且只有1和2是用类比(多人合租房子,房子比做进程,人比做线程)来讲解的,这种比喻可以说很恰当,把进程和线程间的关系,以及线程间的关系分析的非常清楚。而讲到3的时候,已经更多的从概念角度分析了,就是说在作者并没有试图在一个类比中说明这三个概念(我没有在那篇文章中找到电力概念)。
而阮兄的文章,通过 工厂/车间/人 试图把CPU/进程/线程说清楚,这也是我的困惑所在。
在我看了,引入电力这种类比之后,但是开头这句,已经把线程/进程混淆了(不过话说回来,在linux系统里面,在最底层,进程线程确实不分的):
假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。
BTW:
2013年4月24日 21:11 | ∞ | 引用
小涛 说:
进程是OS在程序运行时资源分配和调度的一个独立单元,一个进程可以开启一个或多个线程,进程抢到cpu时间片之后,如果该进程开启了多个线程,再由线程抢占cpu时间片,谁得到时间片谁执行。
2013年4月24日 21:42 | ∞ | 引用
(void*) 说:
这篇文章写的很好,尤其是对于对计算机系统了解不是很多的人,看了这篇文章之后,会对计算机中的多任务(其实也就是多进程),以及一个进程的多线程有了一个初步的了解。但是因为文章的更多的内容是关于CPU调度的,所以其中对内存的东西解释的就不是那么清楚了。比如上面各位提到的内存共享之类的讨论。计算器系统对计算资源的分配(CPU)和对内存的分配是分开进行的,只有这两个方面的知识都介绍了,才能比较清楚的解释这方面的内容。相反如果非要把一个柔和到一个中去,那么就会出现各种不合适的地方。比如我觉的用房子的比喻进程,用房间比喻线程,是合适的,将是吧内存比喻为房子中房间是不合适的。毕竟系统的内存的时候用多种不一样的用法,堆和栈你可以勉强的比喻为房间中的空间,但是共享内存,这个东西就在进程之外了,再用空间比喻就不恰当了。我觉的阮兄可以考虑再写一篇系统如何管理内存的问题。
2013年4月25日 10:38 | ∞ | 引用
viho_he 说:
引用小涛的发言:进程是OS在程序运行时资源分配和调度的一个独立单元,一个进程可以开启一个或多个线程,进程抢到cpu时间片之后,如果该进程开启了多个线程,再由线程抢占cpu时间片,谁得到时间片谁执行。
就我所知道到的OS(windows / linux / VxWorks / qnx)里,目前没有哪个是这样做的。
虽然目前没有不排除有这系统会这样去实现,然而从模型来说,这是个很糟糕的模型,因为这个模型增加了调度器的复杂度,调度器需要判断当前调度的单位是进程还是线程,并且做出不同的处理,加上优先级、时间片轮转、线程/进程运行状态等机制以后,此模型复杂度会显著增加,而到了SMP(同构并发多处理器)的系统上,此模型基本上已无能够工作的可能性。
即使在qnx这样鼓励用进程而非线程的微内核的OS上,文档仍然说到:Threads are scheduled globally across all processes.即调度的基本单位是线程,不是进程。调度器在调度任务时,只知道线程,不知道进程这个东西,对于进程的管理,是OS别的组件的事情。
2013年4月25日 12:30 | ∞ | 引用
noname 说:
但实际上,从low-level implementation的角度来看,线程进程没什么区别,只是要处理一些资源共享带来的一些问题(比如信号怎么处理)而已。因此真正design和implement过操作系统的人就会觉得,这么解释反而会增加一些误解。
2013年4月26日 23:19 | ∞ | 引用
gordon 说:
引用viho_he的发言:就我所知道到的OS(windows / linux / VxWorks / qnx)里,目前没有哪个是这样做的。
viho_he 能够推荐一些资料吗?受个人条件限制,能把硬件和操作系统结合起来讲的人很少,遇到一个明白人不容易,就厚着脸皮问了。
2013年4月27日 05:21 | ∞ | 引用
bj0629 说:
我个人感觉80年代和90年代初期的书和杂志里一般说multi task,后来变成 multi processing ,在90年代末期 windows 编程里又看到了 multi thread。单个CPU实现所谓的多任务、进程、线程,只能靠分时中断或事件中断,排队来实现。有些理念我自己理解是在忽悠和为了广告效应而已。
谢谢楼主的分享
2013年4月28日 09:45 | ∞ | 引用
gordon 说:
为什么要引入多级存储和虚拟存储器?
单级存储器的基本矛盾和解决方法
在一定存储器件条件下,容量越大,其寄生参量和走线延迟也越大,因而会降低其工作主频,也就是降低了存储速度。
寄生参量是电路的东西,为什么要考虑这个?
最典型的就是现在最热门的量子计算机,根据摩尔定律 大概每两年 一块集成电路板上可以容纳的器件数会加倍。 这个大家可以感受得到 计算机和其他电子设备的速度容量都在不断翻倍 当一个二级管小到只有几个原子那么大的时候 经典物理就不再适用 必须考虑量子效应了传统计算机10几年后就会碰到量子障碍。
2013年4月29日 18:52 | ∞ | 引用
xubincd 说:
话说,我认为抽象的概念,发明出多少种比喻来进行解释也是在做无用功,抽象就是抽象,必须经常用去琢磨这种概念,拿现实世界的来做比喻我觉得对抽象本身来说其实并无帮助。
仅个人意见,不知道各位怎么看
2013年4月29日 22:34 | ∞ | 引用
viho_he 说:
引用gordon的发言:viho_he 能够推荐一些资料吗?受个人条件限制,能把硬件和操作系统结合起来讲的人很少,遇到一个明白人不容易,就厚着脸皮问了。
操作系统是一门实践性极强的学问,而且与CPU的硬件功能结合得非常紧密,可以说操作系统的核心模块都是关于怎样玩转CPU的硬件功能的,很多过去原本是操作系统的软件功能,被做到了CPU硬件里面。个人经验是,不要怕接触技术细节,只有在大量具体的技术细节的积累之上,才能真正理解抽像的概念。 我建议你调试linux kernel玩玩,有条件的话买一个arm的开发板自己弄弄,没条件可以在PC机上安装模拟器来玩,比如QEMU。 读书的话,可以啃《Linux内核源代码情景分析》,不用读全书,只把你关心的那几章通读就行了。 另外,为了能真正读懂kernel源码,你需要至少学习一门CPU的知识(即阅读枯燥冗长的CPU手册)作为辅助,可以从IA入手,也可以从ARM入手,以你手头的能用的硬件为准。最起码要了解中断的处理机制、内存的处理机制。 《Linux内核源代码情景分析》用的是IA。
2013年5月 2日 15:12 | ∞ | 引用
mdyang 说:
“不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。”
mutex和二元信号量并不同,http://stackoverflow.com/questions/62814/difference-between-binary-semaphore-and-mutex
2013年5月 9日 12:17 | ∞ | 引用
马琳琳 说:
很容易看懂,图片也放的很好看,这在为软考备战,看了这篇文章,觉得看题看的晕晕的我也不晕了,谢谢楼主分享这么好的经验,这么好的文章,感谢
2014年4月10日 10:27 | ∞ | 引用
一生只做一件事 说:
这种方式比较适合用来解释一个复杂概念的一个方面,或者从某个角度的理解。想面面俱到的说明白一个复杂的系统,繁琐枯燥的概念,以及这些概念间的推演几乎不可避免。 正解!
但 阮 先生能解释到这个地步已属难得,尤其是这种比喻方式极好。往往让初学者瞬间理清思路。
2015年3月21日 18:26 | ∞ | 引用
FredWe 说:
引用viho_he的发言:抛开各种技术细节,从应用程序角度讲:
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
2015年4月25日 01:56 | ∞ | 引用
FredWe 说:
这个评论写得好,想知道对于多核处理器又该如何解释
引用viho_he的发言:
抛开各种技术细节,从应用程序角度讲:
1、在单核计算机里,有一个资源是无法被多个程序并行使用的:cpu。
没有操作系统的情况下,一个程序一直独占着全都cpu。
如果要有两个任务来共享同一个CPU,程序员就需要仔细地为程序安排好运行计划--某时刻cpu和由程序A来独享,下一时刻cpu由程序B来独享
...
2015年4月25日 01:57 | ∞ | 引用
anonymous 说:
引用herodot的发言:阮兄,
我是你的博客(包括你的英文BLOG)的忠实读者。这个回复纯属技术探讨。你这篇关于进程和线程的文章,图文并茂,很通俗,但不易懂。坦白说,在我看来很多比喻很不恰当,比如:
1. 车间/电力/人三者,来比喻进程/CPU/线程三者,其实既没有体现出进程作为程序的一次执行(有独立的内存空间)这一特点,也没有体现出线程作为CPU调度单位这一特点。人和电力的关系是什么呢?所以“车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的”,这句话就很难理解。
2. 用厕所容量,来比喻锁,也不合适。因为线程间同步是为了防止竞争(就是说因同时修改,而导致的数据不一致)。本质上讲,进程的内存空间是天然独立的,线程的内存空间是天然共享的。正因为如此,进程通信/线程同步才是系统编程的很大一块内容。进程和线程简单而基本靠谱的定义如下:
1. 进程:程序的一次执行
2. 线程:CPU的基本调度单位
这两个概念虽然过于简单,但是完全可以为理解OS/线程/进程打下坚实的基础,我认为关于进程/线程的探讨,无论采用何种方式,都必须以这两句话为落脚点,才算靠谱。你写的大多数文章相当出色。在以通俗的方式解释复杂的概念这方面,尤其出色。但是,我个人的经验,这种方式比较适合用来解释一个复杂概念的一个方面,或者从某个角度的理解。想面面俱到的说明白一个复杂的系统,繁琐枯燥的概念,以及这些概念间的推演几乎不可避免。坦白说,在实际项目中大量用到线程/进程之前,我看过很多遍相关的概念,也写过小的示例程序,但真到了用的时候,还是发现之前没搞明白。
我对进程/线程的理解也很粗浅。个人见解,仅供参考。
这个才是正解 楼主说的其实我真没看懂 但是在各位仁兄说的 我貌似知道了点什么。
2015年6月19日 11:32 | ∞ | 引用
wisdom701021 说:
這篇文章真的寫得太好了,跟我心中所想,完全不謀而合
但願版主下次還有類似的講解
(當然如果這篇文章還有簡單易懂以及可執行的程式碼的話那更好)
期待下次再來,謝謝分享
2015年8月28日 13:28 | ∞ | 引用
mousycoder 说:
@herodot:
线程其实是轻量级进程(Lightweight Process,LWP),这个才是根本,进程才是CPU调度基本单位。
阮兄的比喻确实不够恰当,其实这些概念翻译过来,都变味了,不过你的评判大部分是对的,少部分还是有些问题。
详情可以看下:http://mousycoder.com/the-pragmatic-sa-13/
2015年9月14日 13:27 | ∞ | 引用
我要发表看法
您的留言 (HTML标签部分可用)
您的大名:
«-必填
电子邮件:
«-必填,不公开
个人网址:
«-我信任你,不会填写广告链接
记住个人信息?
«- 点击按钮
联系方式 | ruanyifeng.com 2003 - 2015
iOS学习重要知识点整理02-进程和线程的一个简单解释相关推荐
- 进程与线程的一个简单解释
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:阮一峰的网络日志 进程(process)和线程(thread ...
- 进程与线程的一个简单解释(转)
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它 ...
- 进程与线程的一个简单解释(阮一峰 宅学部落 )
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握.最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1 计算机的核心是CPU,它承担 ...
- 进程和线程的一个简单形象的解释
转眼暑假一过,2015年的校招即将开启大幕,身为计算机专业的朋友们,在面试中是不是经常会被问到一个问题:进程和线程的区别,今日偶然看到阮一峰的博客,他用一个很好的类比把他们解释的清晰易懂,会不会突然让 ...
- cpu、进程、线程、多线程的一个简单解释(转载)
一 dljd(linux) 1.线程:一种程序可有同时有多条执行线路在执行,线程是一个程序其中正在执行的一条执行线路: 说明: 线程就是一个程序的执行线路.我们写一段程序,你要让它执行,它总得有一个执 ...
- c语言分支和循环总结,C语言 ---- 循环分支 iOS学习-----细碎知识点总结
#import // #import是OC种的导入头文件或者是系统框架的指令 // 定义了一个Season枚举类型 enum Season { Spring = 1, // 值默认是从0开始,后面 ...
- 计算机操作系统学习笔记 第二章、进程与线程
文章目录 1 进程和线程 1.1 进程的概念和特征 1.1.1 进程的概念 1.1.2 进程的特征 1.2 进程的状态与转换 1.3 进程的组织 1.4 进程控制 1.5 进程通信 1.5.1 共享存 ...
- 《史上最全、最强Java学习路线知识点整理!!全是干货!!》
自己平时学习整理的笔记,分享给各位,希望可以帮助各位,文章很长,点击收藏慢慢看吧!以后会分别对各个知识点进行透彻分析,敬请期待! Java基础 集合 HashMap 1.7 数组 + 链表.扩容时头插 ...
- IOS 一些小知识点整理
NSArray 类定义的方法 1. makeObjectsPerformSelector:@select(aMethod) 让数组中的每个元素 都调用 aMethod 2. makeObjectsP ...
最新文章
- linux配置qt使用git,Linux操作系统下安装使用说明.txt
- js 获取样式兼容方法
- 【转载】SAP参数文件简介
- 各大公司官网都有哪些显而易见的Bug?
- 迁移用友U8 ERP服务器
- kettle linux下的目录怎么看_Linux系统各目录下指令解析
- The Elements of Style 4ed ---英文写作指南(一)
- 17、【易混淆概念集】第十一章1 项目风险 风险临界值 VS 风险承受力 风险管理流程 风险管理及变更流程 规划风险管理 识别风险
- 黑苹果常用 工具+Kext+ACPI+UEFI驱动 下载
- MAC下串口助手合集
- 解决Linux系统下,出现“不在sudoers文件中,此事将被报告”的问题
- Python快速实现视频播放器
- 如何利用数据挖掘让RTB广告效果倍增?
- 定理在数学中的简写形式_【数学】「专题」斯图尔特定理(Stewart's Theorem)与中线定理(Pappus Law)...
- 小学生计算机课如何上,如何上好小学信息技术课
- 佐治亚理工学院计算机科学硕士,佐治亚理工学院
- 爬虫——爬取人民网数据生成词云图
- 【安卓开发系列 -- 开发环境】Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具)
- HashMap引发死链问题(HashMap、ConcurrentHashMap原理解析)
- 算法的时间与空间复杂度(精细+举例)
热门文章
- 生成基于STM32f103zet6的宠物自动投食机的代码,实现定时、定量、自动的投食,并可以通过Tlink物联网平台控制投食机投喂食物和查看投食机的投喂状态...
- ROS2-Gazebo仿真
- 【原创】PE检测工具
- 微软捕获中国黑客刘蝶雨的故事
- CSDN 博客被自己误删了怎么办---(联系QQ客服)
- 基于FPGA的LD3320语音识别模块驱动设计
- 机器学习之二:回归分析
- 获取SVG文件中use标签xlink:href的值
- 神之意志是什么?他想要做什么?
- 最全的基于c++的serialport.cpp与serialport.h类文件(解析版)