根据现实中一个实例--线程和进程的理解

进程(process)和线程(thread) 是所有学习计算机行业人员绕不过去的两个基本概念,但是它们却十分的抽象,十分不容易理解.

最近总结了一个例子来解释一下,可能要好一点.

1.我们知道,CUP是一个计算机的核心,它就像一个工厂一样,只要启动计算机,它就会一刻不停的运动.我这样假设,这个工厂的名字是xxx工厂,这个工厂里面有5个车间,车间门牌号是,"1","2","3","4","5",每个车间的标准配置(注意,是一个车间的配置)是有10个工人,有一个厕所,有一个三个床位的卧室,一个一次性可以容纳5个人的餐厅.

2.我们假设,这个工厂只能自己发电使用,这样电量就十分有限,每次只能供工厂内的一个车间正常运行.(cpu一次只能执行一个任务)(任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。)

3.我们假设,

星期一:

给车间"1"供电,现在"车间1"正常运行,这个车间生产的是茶叶蛋,它里面只有一个工人

这时候我们就可以这样认为:

一个车间就是一个进程.(一个任务至少有一个进程,每个进程都是拥有空间的或者说资源)

一个工人就是一个线程(线程不具有空间或者说资源) ,这个车间有一个工人,煮茶叶蛋他一个人就可以搞定.(一个进程中至少要有一个线程).

4.

星期二:

给车间"2"供电,现在"车间2"正常运行,这个车间生产的是国产红旗轿车,它里面有10个工人

这时候我们就可以这样认为:

一个车间就是一个进程.(一个任务至少有一个进程)

一个工人就是一个线程 ,这个车间有10个工人,生产一辆红旗轿车,需要多人共同合作才能完成.(一个进程可以包含多个线程)

生产一辆汽车是一件很累的事情,谁累了,就可以到卧室中躺一会休息一下.因为这个卧室是车间的,也就是说这件这10个工人都可以进去--------------(一个进程的内存空间是共享的,每个线程都是可以访问这些共有的内存的)

工作的时候,大家肯定有要上厕所的时候,可是厕所的空间是有限的呀,每次只能容纳一个人,只有你用完出来之后别人才能用.----------------(一个线程使用某些共享的内存是时,其他线程必须等待它使用完了,才能使用)

我们都知道,上厕所的时候,内部都会有一把锁.在计算机中,这把锁是在外边的.

我要蹲坑,于是进入厕所,然后锁上门(别问我怎么把外面的锁锁起来的),后来的人看到厕所上锁了,就会知道里面有人,就会在门口排队,等锁打开了我出来,才能再进去.--------------------这就是"互斥锁"(Mutual exclusion)缩写-Mutex,作用是防止多个线程同时读写某一块共享的内存区域.

而卧室,一次只能容纳3个人,如果有5个人想休息,那么只能进去3个人,剩下的2个就只能在外面等待.(一些内存,只能给固定数目的线程使用).但是剩下的2个人也很想休息,于是也进去,这时候就会产生多个线程互相冲突.怎么解决呢?

很简单:我们给这个卧室的门口放三个门卡(算是一个标志吧),进去一个人,就取走一个门卡,出来的时候放回原处.这样,后面来的人,如果发现门卡没有了,就会排队.------------------------这样的方法就是"信号量"(Semaphore)

其实,互斥锁也是信号量的一种特殊情况,因为互斥锁简单,效率高.所以当保证资源独占的时候,采用这种设计.

时间: 2024-12-11 15:30:25

根据现实中一个实例--线程和进程的理解的相关文章

操作系统中作业、线程、进程、内存管理、垃圾回收以及缓存等概念

作业:用户在一次解题或是一个事务处理过程中要求计算机系统所做的工作的集合.它包括用户程序.所需要处理的数据以及控制命令等.作业是由一系列有序的步骤组成. 进程:一个程序在一个数据集合的一次运行过程.所以一个程序在不同数据集合上运行,乃至一个程序在同样的数据集合上的多次运行都是不同的进程. 线程:线程是进程中的一个实体,被系统独立调度和执行的基本单位. 管程:管程实际上是定义了一个数据结构和在该数据结构上的能为并发进程做执行的一组操作,这组操作能同步进程和改变管程中的数据. 操作系统中作业.线程.

线程与进程的理解

1.进程和线程的区别:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 2.新手学习多线程的详细思路和流程:http://www.cnblogs.com/xiaoguangit/p/4991825.html 3.我是一个线程:http://kb.cnblogs.com/page/542462/ 4.多线程编程基础知识:http://www.cnblogs.com/cy163/archive/2006/11/02/547428

谈谈对线程与进程的理解

概念: 线程 线程(threading)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描

关于线程和进程的理解

在知乎上看的关于线程和进程的形象理解,留作纪念. 这个场景是这样子的,山上有座庙(进程),庙里住了很多小和尚和老和尚(线程),当然隔壁山上也有很多尼姑妹子.小和尚和老和尚们每天都需要下山挑水喝.这些个和尚有刚上山的(就是有点傻的),有比较聪明的,也有闹过矛盾的.场景,人物呢,大概就是这么个样子. 俗话说的好,有人的地方就有江湖.这些个小和尚,老和尚都不是很安分,为了每天的这个挑水工作闹了很多很多的矛盾,也犯过很多傻. 下面对挑水工作所有发生的情况做个详述: 1)刚上山的小和尚挑水,就是比较傻的那

线程、进程 概念理解

1 .什么是线程? 线程是指程序在执行过程中,能够执行程序代码的一个执行单元,在 Java 语言中,线程有四种状态:运行,就绪,挂起,结束. 2 .线程与进程的区别? 进程是一段正在运行的程序,而线程有时也被称为轻量级进程,它是进程的执行单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间,但是,各个线程拥有自己的栈空间. 3 .为什么使用多线程? ( 1 ).使用多线程可以减少程序的响应时间.单线程如果遇到等待或阻塞,将会导致程序不响应鼠标键盘等操作,使用多线程可以解决此问题,增强程

线程和进程的理解

今天看了一下进程和线程的一些概念,对线程和进程进行了理解,现在用我实际生活中的一段经历来理解线程和进程. 2008年第一次去老公家, 从北京到山东,整个乘车行程可以说成是一个进程. 记得很清楚,在沧州的时候换了一次车,那么A段(从北京到沧州)可以看成是一个线程,B段(从沧州到山东目的)是一个线程 所以一个进程可以有多个线程,此时的线程是有先后顺序的,A段执行完成了再执行B段.

关于《Windows程序设计(第五版)》中一个实例程序的疑问

最近一直在看Charlse Petzold的<Windows程序设计>,作为一个新得不能再新的新手,只能先照着书的抄抄源码了,之前的例子一直都很正常,但昨天遇到一个很诡异的BUG. 先看实例源码吧: 1 /*----------------------------------------------------------------- 2 ENVIRON.C -- Environment List Box 3 (c) Charles Petzold,1998 4 Copy by XXXX,2

计算机必知必会:进程process与线程thread 进程定义为一个正在运行的程序的实例

http://www.nowamagic.net/librarys/veda/detail/1741进程和线程这对概念的理解也是很难的,至今网络上可查的资料对其的理解出入都挺大,在不同的操作系统中,如linux和windows中,其概念和实现都是有出入的.因此,我在这里结合我自己的理解谈下这两个概念,讲的都是一般性的概念,并且主要是基以WINDOWS的. 一般将进程定义为一个正在运行的程序的实例.我们在任务管理器重所看到的每一项,就可以理解为一个进程,每个进程都有一个地址空间,这个地址空间里有可

辛星浅析Linux中的线程和进程

进程和线程都是由操作系统的程序运行的基本单元,系统利用该单元实现系统对应用的并发性.一个进程至少有一个线程,一个线程也至少属于一个进程.进程和线程的区别在于:线程的划分尺度小于进程,使得多线程程序的并发性更高. 而且进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率.线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行,但是操作系统并没有将