搜索
系统检测到您的用户名不符合规范:

关于队列的生活实例

浏览:4135 发布日期:2015年10月10日 分类:心情闲聊
举个银行的排队例子。

看了很多的队列实例,都没举个简单例子。 其实银行的叫号系统就是形成队列的机制。 为什么叫队列,就是解决排队的问题。排队有什么问题?耗时间,插队,队列不稳定。通过程序就可以解决些问题。

实际的例子就是银行业务处理
1 第一种实例,大家都排队,每个人 花二十分钟办理业务。如果一百个人按顺序来要花很长的时间 。这种系统大家春节回家买票是肯定经历过,很漫长很痛苦,效率极低。 最可气的是如果售票员去吃饭去了,这个队伍就崩溃啦(线程)。
2 第二种实例。 到银行以后,抽号机或保安按照时间顺序给每个人发一个号码(几乎不花什么时间就可以完成这个任务),你不用一直在队伍里。可以去干其他事,等到柜台叫你的号码时,你就可以去办相关业务。这样队伍很长,但是保障了只要你有号码,即使某个柜员临时离开了,你的业务还是可以办理。

3 第三种实例。在第二种实例的基础上实行。抽完号以后。保安说大家有什么业务,先要按照规范来填单子,以免到了柜台反复的修改。 比如你要汇款,填完单子以后,保安说你这里面有几个问题需要修改一下。。。。经过修改以后,单子(表单)没有问题了。保安说你留下要办的材料和电话号码后可以走了。办完业务以后,我们会电话通知你的。过了两天,银行通知你业务量很大,这个业务刚才才办完。(有点夸张的例子) 。这个流程就是标准的队列流程。

发邮件,秒杀等等其实和这个流程一样的。最关键的地方就是要在很短的时间内形成队列,不要在队列里处理具体细节。可以把细节存起来后期处理。

说到这个后期处理,我想插一下nodejs的事件循环原理。以上的例子就是nodejs的事件循环实例的简单化, 细节存起来后期处理就是nodejs中的回调函数,每个人去办理业务都没有阻碍其他人办理业务,队伍不会因为一个人在柜台办理业务而暂停下来。尽管柜台只有一个柜员在处理业务。 这就是nodejs的单线程非阻塞机制。当然实际不是这么简单的,但是流程大概就是这样。所以现在nodejs很火,处理机制很高效。
那么在第三种模式你你是在什么时间开始办理业务的呢?实际上你一进银行大厅就开始办理业务了。 这个问题nodejs也有介绍的。

目前实现这个队列流程的简单方法是使用redis,就相当于叫号的过程,memcache也可以,但是redis 可以在内存中使用,也可以存入物理数据库。
两者都可以使用内存来形成队列。 速度就是在使用内存存储机制来实现高速处理过程。

秒杀的例子原理也想不大明白,其实秒杀也是 队列。 用户登录以后,等待后台服务器启动秒杀程序(计划任务)。 抢购开始,先检查商品数量是否大于1,如果大于1,之后商品数量减1,队列写入用户信息,当前时间,秒杀内容。 写入完成以后,通知用户秒杀成功,可以处理后续的事务(出队列秒杀数据写入数据库)。

队列这个方法就是用来解决实际问题的。 具体的细节大家可以看看redis怎么处理实际的问题,网上有教程。 这里的队列先见先出。 关键点两个:怎么入队,怎么出队。 redis教程花很短时间就可以掌握, 基本操作和mysql是差不多的。
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
兄弟连上海
积分:1195 等级:LV3
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /