【明人不说暗话】我就只讲进程与线程

戳蓝字“CSDN云计算”关注我们哦!
640?wx_fmt=jpeg
作者 | 阮一峰
责编 | 阿秃

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。

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

640?wx_fmt=jpeg

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

640?wx_fmt=png

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

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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

640?wx_fmt=png

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

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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

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

640?wx_fmt=jpeg

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

(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=jpeg

福利
扫描添加小编微信,备注“姓名+公司职位”,入驻【CSDN博客】,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

640?wx_fmt=jpeg

推荐阅读:
  • 漫画:什么是希尔排序?
  • 一次失败的面试,复习一次一致性哈希算法
  • Pandas中第二好用的函数 | 优雅的Apply

  • 程序员因接外包坐牢 456 天!两万字揭露心酸经历
  • 限时早鸟票 | 2019 中国大数据技术大会(BDTC)超豪华盛宴抢先看

  • 阿里开源物联网操作系统 AliOS Things 3.0 发布,集成平头哥 AI 芯片架构!

  • 雷声大雨点小:Bakkt「见光死」了吗?

真香,朕在看了!

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

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

相关文章

(需求实战_进阶_05)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试

接上一篇: 文章目录一、RabbitMQ 配置文件1. RabbitMQ 生产者配置文件更新二、启动项目2.1. 启动项目2.2. 清空控制台三、管控台总览3.1. 登录管控台3.2. 交换机中查看绑定队列总览四、验证测试4.4. 生产者①请求4.5. 生产者②请求五、启动RabbitMQ5.1. 进入sbin目录…

两台邮件服务器共用一个公网地址,两个不同域邮件服务器的互通

两个不同域的邮件服务的互通如图,有两个不同域的邮件服务器(postfix)通过一个DNS服务器实现互通。首先说明一下IP分配情况服务器1qq.cometh0(VMnet2): ip:192.168.2.2 netmask:255.255.255.0 gw 192.168.2.1 hostname:mail.qq.com服务器2(qq.neteht0VMne…

希捷银河声音大_【推仔说新闻】那款硬盘它终于来了 希捷推出首款双磁臂硬盘...

经常关注科技新闻的朋友们应该都知道,现在机械硬盘领域可以说是被固态硬盘冲击的不清,而对于我们广大用户们来说,HDD这一个储存介质就被我们更多的用来充当仓库盘使用,毕竟现在的固态已经下探到白菜级别的价格了。但是对于那些HDD…

(需求实战_进阶_06)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试

背景: 为了减轻服务器的压力,现在原有项目的基础上集成消息队列来异步处理消息! 此项目是企业真实需求,项目的代码属于线上生产代码,直接用于生产即可! 此项目采用MQ发送消息模式为:订阅模式,如果对RabbitM…

【目瞪口呆】通信机房内部长这样

戳蓝字“CSDN云计算”关注我们哦!作者 | 小枣君责编 | 刘晶晶大家好,我是小枣君。一直以来,我都在努力给大家做通信知识科普,也写了很多有趣的文章。不过,文章再有趣也只是文字,不是实物。现实生活中&#…

NLP的ImageNet时代已经到来

摘要: NLP领域即将巨变,你准备好了吗? 自然语言处理(NLP)领域正在发生变化。 作为NLP的核心表现技术——词向量,其统治地位正在被诸多新技术挑战,如:ELMo,ULMFiT及Open…

mysql字段分隔符拆分_面试题Mysql数据库优化之垂直分表

在日常的开发工作中,除了JAVA相关的技术,打交道最多的就是Mysql数据库,当数据积累到一定程度,比如500W时就会难免出现一些慢sql,对数据库的优化方式有很多,比如通过增加合理的索引,今天我们来说…

python print用法不换行_python3让print输出不换行的方法

python 3.x版本print输出不换行的格式如下: print(x, end"") 其中,end"" 可使输出不换行,不能省略。 举例:输出结果:内容扩展: python3.x中如何实现print不换行 大家应该知道python中p…

使用Numpy和Opencv完成图像的基本数据分析(Part II)

摘要: 使用Numpy和Opencv完成图像的基本数据分析后续部分,主要包含逻辑运算符操作、掩膜以及卫星图像数据分析等操作 在上一节中,主要是介绍了图像的基本知识以及OpenCV的基本操作,具体内容参见“使用Numpy和Opencv完成基本图像的…

(需求实战_进阶_07)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试

接上一篇:(企业内部需求实战_进阶_06)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试 https://gblfy.blog.csdn.net/article/details/104219096 此项目采用MQ发送消息模式为:订阅模式,如果对RabbitMQ不熟悉,请学习…

分布式事务方案这么多,到底应该如何选型?

戳蓝字“CSDN云计算”关注我们哦!作者 | 温卫斌责编 | 刘晶晶源自 | dbaplus社群作者介绍温卫斌,就职于中国民生银行信息科技部,目前负责分布式技术平台设计与研发,主要关注分布式数据相关领域。微服务兴起的这几年涌现出不少分布…

造大专计算机学历,广昌县职业技术学校计算机应用专业助您 掌握一技之长获大专学历...

——专题宣传报道之四:计算机应用专业计算机应用专业一直是广昌县职业技术学校开设的特色专业。该专业由一批经验丰富、专业优秀的教师任教,主要学习计算机操作、组装、网络应用、影视后期制作、平面设计、文档管理等理论知识和实训课程。特色一&#xf…

阿里云正式推出消息队列Kafka:全面融合开源生态

摘要: 在全面兼容Apache Kafka生态的基础上,消息队列Kafka彻底解决Apache Kafka稳定性不足的长期痛点,并且支持消息无缝迁移到云上。 近日,阿里云宣布正式推出消息队列Kafka,全面融合开源生态。在全面兼容Apache Kafk…

异常将上下文初始化事件发送到类的侦听器实例_Spring的Bean实例化原理,这一次彻底搞懂了!...

前言之前分析了Spring XML和注解的解析原理,并将其封装为BeanDefinition对象存放到IOC容器中,而这些只是refresh方法中的其中一个步骤——obtainFreshBeanFactory,接下来就将围绕这这些BeanDefinition对象进行一系列的处理,如Bean…

(需求实战_01) SpringBoot2.x 整合RabbitMQ_生产端

文章目录一、依赖配置引入1. 引入SpringBoot整合RabbitMQ依赖2. 生产者配置文件3. 主配置二、代码Conding2.1. 生产者代码2.2. 实体对象2.3. 测试类一、依赖配置引入 1. 引入SpringBoot整合RabbitMQ依赖 <!--springboot整合RabbitMQ依赖--><dependency><groupI…

全域图像搜索给你更精准的搜索体验

摘要&#xff1a; 2018飞天技术汇&#xff0c;阿里巴巴机器智能技术实验室的刘磊带来题为全域精准图像搜索介绍的演讲&#xff0c;主要从四个方面进行了阐述&#xff0c;第一部分介绍了图像搜索的基本概念&#xff0c;第二部分主要是讲解了图像搜索的技术架构及其优势&#xff…

【这些都不知道你就是个弟弟】Docker常用命令

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 程序员欣宸转自 | 企业博客责编 | 阿秃除了基本的docker pull、docker image、docker ps&#xff0c;还有一些命令及参数也很重要&#xff0c;在此记录下来避免遗忘。环境信息以下是本次操作的环境&#xff1a;操作系统&…

php 模数 指数 公钥生成_php实现JWT认证

什么是JWTJWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息&#xff0c;以便于从资源服务器获取资源。比如用在用户登录上。JWT定义了一种用于简洁&#xff0c;自包…

SpringBoot2.x 整合RabbitMQ_消费端

这一篇讲解消费者 文章目录一、依赖配置1. 引入依赖2. 配置文件3. 主配置二、代码Conding2.1. 消费者代码一、依赖配置 1. 引入依赖 <!--springboot整合RabbitMQ依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>sp…

不断迭代,严苛细节,最终性能如何满足? 基于ELK的大数据平台实践分享

摘要&#xff1a; 在2018年Elastic Meetup 南京交流会中&#xff0c;来自云利来科技的涂海波为现场的听众带来了题为《南京云利来基于ELK的大数据平台》的精彩分享。在本次分享中&#xff0c;他首先进行了公司简介&#xff0c;然后介绍了数据分类&#xff0c;包括数据采集及数据…