编程中很多优秀思想或者模式与生活中点点滴滴的事情都有着很高的相似度,如监听器和生活中过马路的红绿灯或者语音播报等。个人觉得在学习编程思想或者模式时如果能和生活相互比较印证,本文就以生活中的排队为题浅谈下编程里的队列。
一,排队方式
相信大家都有过排队的经历,买火车票、去银行办理业务、去银行看病等等,如果人少还好,很快就会到自己,如果黑压压一片人,那真是望穿秋水不可得。在大大小小各种不同的排队经历中,我们也会发现不同的排队方式,以我个人经历来说,大致上分如下两种排队方式。
1、每个窗口对应一个队伍
2、所有窗口对应一个队伍
生活中,这两种排队方式并没有特定的场景,任何排队场景都可用。从个人角度,更倾向第二种排队方式。原因很简单,第一种方式会因为各窗口处理速度不同等因素,导致等待时间不同,会产生一种等待时间上的不均衡,而第二种方式就很直观的平衡了等待时间,各窗口处理速度的快慢对所有排队的人影响相同。然而,实际中受限于场地等问题,第二种方式更少见,比如去火车站排队买票,成百上千的人排成一个队伍,场面必然很混乱难管理。
在编程世界中,排队的场景也很常见,比如订单处理等等,编程中由于不太受限场地(空间)等,而又希望对队列统一管理,所以更多的是使用第二种方式。一般来说,只要处理好队列元素的共享问题就可以了。
二、排队的进阶
无论生活还是编程中,排队都意味着需要时间去等待,如果处于高峰期,那么等待时间就会更长,而且等待时,又不能离开队伍去处理别的事情。所以出现一些优秀的解决办法。比如生活中,去餐馆吃饭,买单后,餐馆会给顾客一个牌子,顾客找一个座位等着,餐馆做好了会自动送来。编程中比如使用观察者模式或者Future模式就无需一直等待,可以继续处理别的。编程中更高阶一点的处理就是消息平台的使用了,如jms、activemq等,只需发送一个消息即可。
三、结束
学习时偶发感想,随手写了一下,如有不对,请轻拍