关于线程和进程的理解

在知乎上看的关于线程和进程的形象理解,留作纪念。

这个场景是这样子的,山上有座庙(进程),庙里住了很多小和尚和老和尚(线程),当然隔壁山上也有很多尼姑妹子。小和尚和老和尚们每天都需要下山挑水喝。这些个和尚有刚上山的(就是有点傻的),有比较聪明的,也有闹过矛盾的。场景,人物呢,大概就是这么个样子。

俗话说的好,有人的地方就有江湖。这些个小和尚,老和尚都不是很安分,为了每天的这个挑水工作闹了很多很多的矛盾,也犯过很多傻。

下面对挑水工作所有发生的情况做个详述:

1)刚上山的小和尚挑水,就是比较傻的那个,和别人都不认识,每天挑水都自己一个人,一次挑一桶水,一天下来发现挑的水根本不够喝。(串行

2)和尚里面有个力气大的,和别人关系不好,每次挑水能挑三桶左右,一天下来,发现挑的水勉强够喝。 (并发

3)和尚里面有几个关系好的,力气也比较大,每次挑水都一起去,每个人都能挑两桶左右,一天下来,发现挑的水不仅够喝,还有时间帮隔壁山尼姑妹子挑水。 (并行

4)在水井里打水,有个专门的妹子负责打水,比较傻的那个小和尚每次都盯着打水的妹子,还随时随地看水桶装满没有(同步);当然,有傻的,也有聪明的,这个聪明的和尚在妹子打水的时候,就乘机在一旁休息,水打满以后,妹子都过来告诉他。(异步

5)水井里有一天没水了,傻和尚看见水井里没水以后,在水井边上一直等着,等有水了再挑回去(阻塞);聪明和尚呢,看见水井里没水了,一点都不犹豫的回去了。(非阻塞

6)又有一天,那闹过矛盾的两个和尚挑水,正好狭路相逢,谁也不让谁过去,一直僵持着。(死锁

7)寺庙里厨房空间有限,每次只能进去一定数量的和尚,当厨房满了以后,其他人只能在外面等着,直到里面的人出来。这个实现的方法是,厨房门口挂了很多锁,每个人进去以后都拿走一把锁,出来以后把锁挂上,这样外面的人就可以知道厨房里面人满没满。(信号量

作者:岳先生
链接:https://www.zhihu.com/question/19901763/answer/121198143
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

1.单进程单线程:一个人在一个桌子上吃菜。
2.单进程多线程:多个人在同一个桌子上一起吃菜。
3.多进程单线程:多个人每个人在自己的桌子上吃菜。

多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了,此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢。
1:对于 Windows 系统来说,【开桌子】的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜。因此 Windows 多线程学习重点是要大量面对资源争抢与同步方面的问题。
2:对于 Linux 系统来说,【开桌子】的开销很小,因此 Linux 鼓励大家尽量每个人都开自己的桌子吃菜。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法。
开桌子的意思是指创建进程。开销这里主要指的是时间开销。
可以做个实验:创建一个进程,在进程中往内存写若干数据,然后读出该数据,然后退出。此过程重复 1000 次,相当于创建/销毁进程 1000 次。在我机器上的测试结果是:
UbuntuLinux:耗时 0.8 秒
Windows7:耗时 79.8 秒
两者开销大约相差一百倍。

作者:pansz
链接:https://www.zhihu.com/question/19901763/answer/13299543
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

时间: 2024-08-13 09:12:49

关于线程和进程的理解的相关文章

线程与进程的理解

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

线程和进程的理解

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

线程、进程 概念理解

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

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

进程(process)和线程(thread) 是所有学习计算机行业人员绕不过去的两个基本概念,但是它们却十分的抽象,十分不容易理解. 最近总结了一个例子来解释一下,可能要好一点. 1.我们知道,CUP是一个计算机的核心,它就像一个工厂一样,只要启动计算机,它就会一刻不停的运动.我这样假设,这个工厂的名字是xxx工厂,这个工厂里面有5个车间,车间门牌号是,"1","2","3","4","5",每个车间的标准

谈谈对线程与进程的理解

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

iOS开发 - 线程与进程的认识与理解

进程: 进程是指在系统中正在运行的一个应用程序,比如同时打开微信和Xcode,系统会分别启动2个进程; 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内; 线程: 一个进程要想执行任务,必须得有线程(每一个进程至少要有一条线程),是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位; 一个进程(程序)的所有任务都在线程中执行; 一个程序有且只有一个主线程,程序启动时创建(调用main来启动),主线程的生命周期是和应用程序绑定,程序退出时,主线程也停止;

对进程、线程、应用程序域的理解

前几天面试的一道题是谈谈进程.线程.应用程序域的区别,虽然能说上来几点,但感觉理解的很肤浅.很不透彻,闲暇时从书箱里翻出尘封已久的<操作系统>(还好,毕业时偶没舍得卖),翻了翻进程的那一章.看之前我列出了下面三个问题:1. 这些概念(技术)出现的背景以及要解决的问题 (要干什么)2. 它们之间的联系与区别3. 三者之间的发展脉络 进程的出现:(复习功课嘛,就把相关的内容都看看了,哎,都忘的差不多了)  进程由操作系统创建.管理的,离开了操作系统也就不谈什么进程了,先看看操作系统的四个基本特征:

线程与进程(我的理解)

最近面试有人问到线程与进程的区别,我就说进程是系统资源分配的最小单位,线程是CPU调度的最小单位.但是人家有细问了一下,我就没回答出来, 后来我查查书,没有查到我满意的解释.感觉应该是这样的(以后有新的理解会补充进来,如果有错也会改正O(∩_∩)O~) 最开始没有线程,只有进程,比如写个程序,程序运行起来以后,进程就是程序运行的实例,pid就是进程的标识. 后来有了多处理器啥的,一些程序为了用上这多个CPU,让这些程序共享系统资源等,但每个程序又有自己的一些属性,这些程序就称之为线程.如果这些程

线程与进程的区别以及对多线程并发的理解

转自: http://blog.sina.com.cn/s/blog_12f5264ff0102v8eq.html http://blog.csdn.net/suxinpingtao51/article/details/8113509 http://blog.csdn.net/cqkxboy168/article/details/9026205/ 一.线程与进程的区别 先简单说说线程与进程的概念: (1)进程是指一个内存中运行的应用程序,比如在Windows系统中,一个运行的exe就是一个进程.