关于“进程”与“线程”的最通俗解析

来源:电子工程专辑


进程(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)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

  

===========

  

PS想加入技术群的同学,加了我好友后,就给我发「篮球的大肚子」这句话,有可能机器人打瞌睡,可以多发几次,不要发与技术无关的消息或者推广。

如果想获取学习资料,就在公众号后台回复「1024」,足够多的学习资料可以让你学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

要想选到音质好的耳机,你应该需要知道这些~

最近在一个音频公司调试我们设备的音频,从这次调试中,有所收获,希望这次的吹牛大家看完后,以后去买音频产品,可以分辨什么是好的,什么是不好的。有些产品硬件没有问题,但是产品经理因为个人喜好…

Fantasia (Tarjan+树形DP)

Time Limit: 1000 ms Memory Limit: 256 MB Description 给定一张N个点、M条边的无向图 $G$ 。每个点有个权值Wi。 我们定义 $G_i$ 为图 $G$ 中删除第 $i$ 号顶点后的图。我们想计算 $G_1, G_2, ..., G_n$ 这N张图的权值。 对于任意一张图 $G$ ,它的权值是这样定义…

买书这件事

知识这种东西,你只有不断的补充才不会觉得匮乏,我每年都会买点书,我喜欢买书,但是却不看书,很多书籍我都是当成工具书来用。我记得在2015年的时候,我需要自己写专利,但是我对写专利这个事情一窍…

Linus Torvalds的最新电脑配置

大家好,祝大家6.1节日快乐最近Linus Torvalds 公布了他的电脑配置,有了这个配置清单之后,每个人都可以拥有一台和Linux之父一样的电脑,当你拥有了一台之后,你可以发个朋友圈,「我今天用Linus 的电脑解了一个…

马上就校招了,是要去实习还是复习?

昨天晚上,遇到一个特别纠结的同学,他现在收到一份实习的通知,他犹豫是要去实习呢还是继续在学校复习学习技术。实习的话可以增加自己校招的筹码,比如在和面试官侃大山的时候,可以把实习这件事情拿出来说,这…

嵌入式杂谈之makefile补充

我看了下自己的文章库存,好像还没有一篇关于Makefile的文章,所以这篇刚好可以弥补自己的缺失。makefile预定义变量预定义变量即系统自带的变量预定义变量作用AR库文件维护程序的名称,默认为arAS汇编程序的名称,默认为asCCc编译器的…

安卓9.0马达框架分析

前言最近需要将之前的一些驱动接口转为安卓标准接口,方便上层应用或者第三方应用去适配。这篇文章先从简单的马达框架入手进行讲解。正文整个马达框架比较简单,安卓官方已经帮我们实现了framework到HAL层,我们需要实现的就只有驱动层。这篇文…

PYQT4 Python GUI 编写与 打包.exe程序

工作中需要开发一个小工具,简单的UI界面可以很好的提高工具的实用性,由此开启了我的第一次GUI开发之旅,下面将自己学习的心得记录一下,也做为学习笔记吧!!! 参考:http://www.qaulau.…

你知道嵌入式,那你看过这个吗?

大家好,因为最近各种原因,我身边的很多同事都转行摆地摊了,可能因为那是一份自由的职业,摆地摊可以从事的范围很广,也不用起早贪黑了,而且收入并不低。也是因为这样,很多嵌入式方面的岗位越来越…

mvc一对多模型表单的快速构建

功能需求描述 Q:在实际的开发中,经常会遇到一个模型中包含有多个条目的表单。如何将数据提交到后台? A: 以数组的形式提交到后台就Ok了(真的那么简单么,如果再嵌套一层呢?) A2:拆分多个模型,映射就没啥问题…

c语言中 if(x) 、if(0) 、if(1)

解释if 语句里面包含真和非真&#xff0c;但是如果我们没有写清楚真和非真的话&#xff0c;会如何呢&#xff1f;if(x)相当于if(x ! 0)如果是指针的话&#xff0c;相当于if(x ! NULL)而if(1)相当于if(1 ! 0)还有if(0)相当于if(0 ! 0)举个例子#include<stdio.h> int main(…

看Linus骂人,真解气

感受下Linus骂人的感觉吧&#xff0c; 这样你会觉得工作中遇到的那些不愉快就算个鸟事背景一个Linux主线的内核维护者提交了一份patch&#xff0c;并说明问题产生的原因是因为应用传的音频有问题。Linus回复如下你他娘的给老子闭嘴&#xff01;这是一个内核bug好不好&#xff0…

不就是要个30K的薪资,他还问我Nginx调优

我是一个运维“老鸟”&#xff0c;目前在到处找工作阶段。周三刚面试完一家公司&#xff0c;还是非常中意的公司。结果是我中意公司&#xff0c;公司不中意我&#xff0c;妥妥的黄了。面试完我才知道&#xff0c;Linux云计算工程师必须能精通20多个企业级服务器优化。我之前不是…

android导出apk文件_Android测试工具入门介绍(三)

介绍一款牛逼的测试框架Drozer&#xff0c;一款可以检测Android一些公共漏洞的工具&#xff08;可能远不止这些、还可以继续挖掘&#xff09;&#xff0c;还可以生成shellcode&#xff0c;进行安卓设备的远程exploit。附下载地址&#xff1a;https://github.com/mwrlabs/drozer…

bomb炸弹

今天看到的一个Linux shell命令&#xff0c;但是我先说下&#xff0c;这个命令是危险的&#xff0c;所以没事的时候不要随便执行&#xff0c;出现了各种危险不要怪我没有提前告诉你哈。DANGER!命令代码:(){ :|: & };:命令解析1:() 意思是定义了一个函数&#xff0c;这个函数…

kindle的xray怎么用_Xray简单使用教程

Xray简单使用教程0X00下载xray 为单文件二进制文件&#xff0c;无依赖&#xff0c;也无需安装&#xff0c;下载后直接使用。下载地址为&#xff1a;注意&#xff1a; 不要直接 clone 仓库&#xff0c;xray 并不开源&#xff0c;仓库内不含源代码&#xff0c;直接下载构建的二进…

文件方式实现完整的英文词频统计实例(9.27)

1.读入待分析的字符串 2.分解提取单词 3.计数字典 4.排除语法型词汇 5.排序 6.输出TOP(20) 文本代码如下&#xff1a; girlRemembering me, Discover and see All over the world, Shes known as a girl To those who a free, The mind shall be key Forgotten as the past Ca…

UNUSED参数,这个宏,很秀

前言你们有没有在写代码的时候&#xff0c;遇到有的参数&#xff0c;从函数体里面传进来&#xff0c;但是又用不上&#xff0c;所以就不引用&#xff0c;但是不引用&#xff0c;在编译的时候&#xff0c;就会提示错误。是不是很尴尬&#xff0c;我们不使用&#xff0c;并不是错…

利用Python对文件进行批量重命名——以图片文件为例

效果如下&#xff1a;0001号用户的第 i 张图片 代码&#xff1a; import osclass ImageRename():def __init__(self):self.path C:/Users/lbpeng/Desktop/test/chictopia2/images1/fashioninmysoul/fulldef rename(self):filelist os.listdir(self.path)totalnum len(fileli…

mysql双重分组没有值也要显示_mysql 统计数据,按照日期分组,把没有数据的日期也展示出来...

因为业务需求&#xff0c;要统计每天的新增用户并且要用折线图的方式展示。如果其中有一天没有新增用户的话&#xff0c;这一天就是空缺的&#xff0c;在绘制折线图的时候是不允许的&#xff0c;所有要求把没有数据的日期也要在图表显示。查询2019-01-10------2019-01-20日的新…