博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程和蕃茄炒蛋
阅读量:4325 次
发布时间:2019-06-06

本文共 920 字,大约阅读时间需要 3 分钟。

今天刚毕业的新人问我关于多线程的问题,因为我也没有理解透彻,一时没有解释清楚,现在细想类比蕃茄炒蛋,整理了下:

IIS是一个天生的多线程程序。

好比,一个订单请求过来,就放出一个厨师做蕃茄炒蛋,再来一个新订单,再放一个厨师出来做蕃茄炒蛋。厨师做完菜,就回房休息。
因为是多个CPU,多核,可以安排N个厨师同时干活。每个厨师参照同一份菜谱(程序代码)做菜,各自记下自己的步骤。
如果还是嫌上菜速度太慢,那就要修改菜谱,原来的菜谱是对针对一口锅写的,现在我们拿来两口锅。
原来的菜单类似于这样:
第一步:准备好一只蛋,和一只蕃茄。
第二步:把蛋放在锅里烧1分钟+,起锅拿出蛋。
第三步,把蕃茄放在锅里烧1分钟+,混入炒蛋。
第四步,翻炒1分钟后起锅。

改进后的新菜单类似于这样:

第一步:准备好一只蛋,和一只蕃茄。
第二步:同时点火两口锅,分别放入蛋和蕃茄,各烧1分钟+。
第三步,看蛋先熟还是蕃茄先熟,先熟的食材的锅先安排熄火。
第四步,待慢热的另一个食材也烧熟后,将两种食材混和翻炒,然后起锅。

现在每个厨师拿到新的菜谱后开工,工作效率明显提升了,每份蕃茄炒蛋大约省下1分钟的时间。

值得注意的是,厨师们还是只参考同一份菜谱,并没有各自复印,但他们各自干活时会记下各自的工作进度(指令指针和私有变量)。

两口锅工作时,锅里的食材不一样,进度不一样,但是还是参考同一份菜谱,各自关注锅内食材的成熟度(指令指针和私有变量)。
厨房的排风扇,水龙头,电灯,燃气,是所有人共享的。
电灯大家都用,下班后最后走的那个人关灯,不会冲突,没有问题。
燃气分别为每口锅各自提供接入,各自开关,不会冲突,没有问题。
水龙头每个人都要用到,而且一个水龙头大家共用,只能一个人接水,这就很容易发生水资源抢占的问题。
最糟糕的情况时,我正准备接水的时候,别人高处截流,导致我一直接不到水,结果鸡蛋炒糊了,油锅都起火了,这就很不安全了。
所以多线程程序会额外引入资源分配,线程同步的问题。
通常的做法是,协调好厨师们用水的方式,比如约定排队取水,先到先得,用完即走。

转载于:https://www.cnblogs.com/heguo/p/11252845.html

你可能感兴趣的文章
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_03常见的微服务框架
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-01 什么是微服务的注册中心
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-02CAP理论知识
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-07 Eureka服务注册中心配置控制台问题处理...
查看>>
小马哥-Java 微服务实践 - Spring Boot 系列-01Java 微服务实践 - Spring Boot 系列(一)初体验...
查看>>
小马哥_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-02 微服务调用方式之ribbon实战 订单调用商品服务...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-06 Feign核心源码解读和服务调用方式ribbon和Feign选择...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
查看>>