正确理解异步分工

背景

一个果园会产出5种水果,ABCDE,每种水果有不同处理方式。

果园每天只采摘一次,每次只采摘一种水果,当天会摘哪一种,会看长势临时决定。

水果种类=事件类型

果农和工人=线程/代码函数

贴纸条=发布消息

看纸条=接收消息

同步方案

果园里只有一个老果农打理,他每天进园采摘一种水果。如果摘到ABC三种水果,他就送到市场上去卖,如果是C水果,在卖的时候还要帮人加工一下。如果摘到D水果,就送隔壁去喂猪,如果是E水果,就带回家榨果汁。

交接

再后来他干不动了,想找个人接班,但是找不到,因为这个人既要会摘水果,还要会卖东西管帐,卖的时候还要会加工,还要会喂猪,还要会榨果汁,一件事可能一天都干不完,在他熟练前水果已经烂在地里了。

异步方案1

老果农不缺钱,只差人手,决定多人分工,工人甲只负责摘果子,放到仓库里,然后在果园外贴个纸条,今天摘了什么果子。工人乙看到有人贴了纸条,就会跑过去看内容,如果是ABC水果,就去仓库里拉出来去市场上卖,如果是C水果,就边卖边加工。如果看到是D水果,就要拉去喂猪,如果是E水果,就什么也不管,留给果农回家榨果汁。

弊病

工人甲很轻松,每天摘下果子,贴张纸条,剩下什么也不用管。工人乙承担了大量的工作,仍然需要一身技能,而且还时不时会看到垃圾信息(摘到了E水果)。

再次交接

随着果园产出果越来越大,水果种类也越来越多,工人乙不胜其烦,最后老果农发现局面和自己退休时一样,也找不到一个合适的全才来接工人乙的工作。

异步方案2

工人甲仍然只负责摘果子,放到仓库里,但是贴纸条的要求变了,如果是ABC水果,贴个红色纸条,工人丙看到红色纸条出现以后就去仓库拉水果去卖。如果是C水果,要再贴张黄色纸条,工人丁看到黄色纸条出现,就会去市场上找工人丙,帮他加工水果。如果是D水果,贴绿色纸条,然后工人戊会拉去喂猪,如果是E水果,什么也不贴,大家没看到纸条,什么也不用做,留给老果农带回家榨果汁。

异步方案2完善

有时候工人丁看到黄色纸条,到了市场上,会发现工人丙还没到,需要等待,于是工人丙承担了黄色纸条的发布工作,每次工人丙看到红条,在出发去市场上之前,在自家门口贴上黄条,这时候工人丁看到了,动身,再也不会发生时间不合拍的问题。

结果

工人甲对贴纸条的不偷懒,让其他工人不再需要跑过来看内容,只要远远看颜色就知道要做什么了。每个收到信息的工人只需要一项技能,维护简单,容易交接。并且再也没有人为了垃圾信息白跑一趟去看纸条

本文由个人 hexo 博客 co2fe.com 迁移

date: 2018-03-28 21:25:01

原文地址:https://www.cnblogs.com/manastudent/p/10190952.html

时间: 2024-11-04 17:51:50

正确理解异步分工的相关文章

if __name__ == '__main__' 如何正确理解

今天刷知乎,突然看到这个问题,发现很多人都是简单的回答了一下,对于很多人来说,更准确的说应该是大部分的 Python 初学者,这样的回答很容易让人理解.所以这里我来做说一下,希望能把这个问题说明白. 先举一个例子:假设我们有一个add.py文件,里面的代码是这样: def add(a, b):    return a + badd(1,2)#用于测试上面函数是否正常 这里就是一个求两数之和的函数,然后我在另一个文件中调用这个模块,这个时候就会把add(1,2)也运行,但是我是不希望运行add(1

TableViewCell reuse 重用 我认为的正确理解与使用方法

其实有点失望,因为用google搜索“uitableviewcell dequeueReusableCellWithIdentifier”出来一堆堆资深博主的文章.看了看,大部分都是在解决一个问题:使用重用时cell显示混乱的问题.该问题本身并不让我失望,失望的是博主们的解释. 首先,回顾一下UITableViewCell的重用,其基本逻辑就是tableView一开始会创建一屏幕的cell(如果有那么多)并把他们标记(Identifier),之后用户上下滑动tableView时,使用Identi

正确理解Python函数是第一类对象

正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性.那到底什么是第一类对象呢? 函数是对象 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性

正确理解“冬钓阴”和“冬钓阳”

转载请注明文章转载自 光威鱼竿价格表 冬季钓鱼一般都讲究冬钓阳,但是又有一种说法叫做冬钓阴,这里面咋一看有点矛盾,那么怎么来正确理解这两者呢? 先来说说什么是冬钓阴,冬钓阴可不是选择阴天出去钓鱼,在冬天,如果没有太阳的话,一般水面受冷风侵袭,水温会比较低,不大利于鱼的活动和觅食,而另外一些地方,比如岸边有密集树林或者有挡风的围墙等等,这些平时觉得比较阴暗地方的水面由于被挡住了风,所以水温会相对高一些,更适合鱼活动,选择这些个地方垂钓就是所谓的冬钓阴. 冬钓阳,顾名思义就是选择有太阳的日子出去钓鱼

正确理解SQL Server配置timeout相关选项

正确理解SQL Server配置选项"remote login timeout"和"remote query timeout" 查看配置选项的设置 sp_configure 远程登录超时 参考:https://msdn.microsoft.com/en-us/library/ms175136.aspx "The remote login timeout option specifies the number of seconds to wait befor

正确理解 LEAL (Load Effective Address) 指令

LEAL: leal S, D    ->    D ← &S 在 CSAPP (Computer Systems: A Programmer’s Perspective) 中,对 LEAL 指令用作简单算术运算的情况,给出了一个例子: For example, if register %edx contains value x, leal 7(%edx,%edx,4), %eax will set register %eax to 5x + 7. 正确理解逻辑为: 1. 设%edx的值为x

正确理解功率MOSFET的RDS(ON)温度系数特性

通常,许多资料和教材都认为,MOSFET的导通电阻具有正的温度系数,因此可以并联工作.当其中一个并联的MOSFET的温度上升时,具有正的温度系数导通电阻也增加,因此流过的电流减小,温度降低,从而实现自动的均流达到平衡.同样对于一个功率MOSFET器件,在其内部也是有许多小晶胞并联而成,晶胞的导通电阻具有正的温度系数,因此并联工作没有问题.但是,当深入理解功率MOSFET的传输特性和温度对其传输特性的影响,以及各个晶胞单元等效电路模型,就会发现,上述的理论只有在MOSFET进入稳态导通的状态下才能

正确理解HTML,XHTML页面的头部doctype定义

摘自http://www.west263.com/info/html/wangyezhizuo/css/20080225/42390.html 当我们制作页面的时候,总会在它的源码头部看到一串声明,比如最常见的 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 如

正确理解WPF中的TemplatedParent

(注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树,由于名称不是很统一,文中统一用英文名称代表两个概念,况且VisualTreeHelper和LogicalTreeHelper也是WPF中提供的类名称) 众所周知WPF中的Logical Tree是逻辑上定义的元素层次树,而实际上显示在屏幕上的元素层次树是Visual Tree,Visual Tree是 (注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树,由于