我们都知道, w找了s做经纪人
基于这个陈述句, 我们要问:
1. w是谁? 他是电影明星, 老实巴交, 是很多人的偶像。
2. s是谁? 他是w的经纪人, 那什么是经纪人呢? 在英文里面, 就是agent, 说的俗点, 就是个代理人, 如果你要理解为跑腿(不是抱腿)的, 那也可以。
3. w为什么要找s做经纪人? 因为w很忙, 无法对每件事情亲力亲为, 所以需要找个帮手, 也就是所谓的经纪人。
现在假设有这样一个案例:
w早上8:00开始工作, 在早上8:00-9:00内, 要把一个礼物送给f导演, 这个礼物必须要在9:00之前送达, 假设完成这项任务需要1小时。 这件事情非常紧急,必须做完,我们称为事件A.
此时, w又约了一个粉丝见面会, 约定时间是9:00-10:00, 很多粉丝都在此时间段内迫切见到自己的偶像---w, 假设完成这项任务需要1小时。这件事情非常重要, 必须做好, 我们称为事件B.
我们可以看到, w不能先做B, 再做A. 第一:f导演不高兴。 第二:粉丝不高兴。
可是呢, w有个非常苦恼的问题: 如果先做完A后, 就没有时间准备, 没有时间休息, 没有时间喝水, 也没有时间撒尿, 匆匆忙忙去见粉丝, 做事情B, 状态可能会不好。
那怎么办呢? w虽然憨厚, 但并不傻, 他聪明着呢! 不然也不可能混成明星。 w想, 此时应该让自己的经纪人s来做A, 自己就腾出时间准备做B, 于是乎, 事情就是这样的继续着:
1. w对s说: 你去把这个礼物送给冯小刚, 9:00前必须做完。 w把整个送礼过程一五一十地说给s听, s点头, 表示知道这件事情了。 这个过程w花了10分钟, 到了8:10分, w花50分钟的时间去准备与粉丝见面, 在准备时间段内, 该吃吃, 该喝喝, 该拉拉, 化化妆, 美美容, 时间充足得很。
2. w从容地完成9:00-10:00的粉丝见面会。
w确实聪明, 用一个agent代理(s)就解决了这个看似很苦恼的问题。 我们回过头来看, 就会发现w的智慧, 他意识到, A事情不必亲力亲为, 而B事情必须亲力亲为, 而且更重要, 所以让agent s去做A事情, 自己做B事情, 精妙!
在软件系统设计中, 很多地方借鉴了如上思路。 我们来看看:
进程P产生了一些数据data, 需要上报给A系统, 便于数据分析, 上报后, 进程P又改变数据data, 并要与B系统交互(更重要)。 如果进程P先做A, 再做B, 效率可能就非常低, 因为上报给A系统会浪费太多宝贵时间。由于有数据的改变, 所以A和B两个步骤不可颠倒, 那怎么办呢?
这里可以借鉴w的智慧, 可以引进一个代理进程agent. 进程P在执行任务时候, 先把data数据给agent进程(这个打交道的过程耗时少), 然后agent进程与A系统交互,进行数据上报(耗时多)。 进程P在与agent打交道后, 会去改变data数据, 并立即与B系统交互, 做更有价值的、更重要的事。所以, 对于进程P来说, 几乎是把自己的时间都用在重要的地方, 用在刀刃上, 所以效率很高。
在实际的软件系统中, 这种方式非常常见, 如果agent是用来做数据收集和上报,我们就可以称之为为data collect agent, 总之, 就是个代理。 这种巧妙的设计和构思, 可以大大提高效率。
实际上, 计算机科学与技术的发展, 很多地方都借鉴了人类社会的智慧, 所以, 要多思考为什么, 多思考本质, 这样才能逐步提高自己的设计能力。 对于那些非计算机专业的程序员来讲, 这一点尤为重要。
最近遇到了一个agent, 所以有上述想法, 也就来闲扯一番!
好了, 不多扯了。