美文网首页Redux思想javascript
关于队列的生活实例-redux-sagas异步操作(1)

关于队列的生活实例-redux-sagas异步操作(1)

作者: smartphp | 来源:发表于2016-10-26 22:08 被阅读65次

讲在redux-sagas异步操作之前,算是铺垫。
举个银行的排队例子。

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

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

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

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

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

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

秒杀的例子原理也想不大明白,其实秒杀也是 队列。 用户登录以后,等待后台服务器启动秒杀程序(计划任务)。 抢购开始,先检查商品数量是否大于1,如果大于1,之后商品数量减1,队列写入用户信息,当前时间,秒杀内容。 写入完成以后,通知用户秒杀成功,可以处理后续的事务(出队列秒杀数据写入数据库)。前段时间魅族的note3很火,我哥很长时间都没有抢到,其实这里有是分队列的问题。点击抢购以后jd可能会根据不同区域来建立多个队列,每个地区的发货量是不同的,所以会出现有的地区能抢到好几次,有的地区每次都抢不到。就像是售票窗口1分了10张票,2号分了0张,你如果按照规则分到2号窗口是怎么也抢不到票的。

队列这个方法就是用来解决实际问题的。 具体的细节大家可以看看redis怎么处理实际的问题,网上有教程。 这里的队列先见先出。 关键点两个:怎么入队,怎么出队。 redis教程花很短时间就可以掌握, 基本操作和mysql是差不多的。

这是我原来学习node.js和php是写的内容。

实例3 其实就是node.js中的异步操作,node.js由于是单线程操作,所以操作都是异步操作,简单说异步操作就是把一件完整的事情拆分成几个步骤来完成。es6 中通过引入async await和yield函数来解决这个问题。redux-sagas就是用这个来实现异步操作的。下一篇结合ireading的异步操作,讲讲这个问题。

相关文章

  • 关于队列的生活实例-redux-sagas异步操作(1)

    讲在redux-sagas异步操作之前,算是铺垫。举个银行的排队例子。 看了很多的队列实例,都没举个简单例子。 其...

  • IOS多线程总结

    目录 简述 NSThread GCD操作与队列异步操作并行队列同步操作并行队列同步操作串行队列异步操作串行队列队列...

  • 基于redis的延时队列的实现

    1、异步消息队列 Redis的list(列表)数据结构常用来作异步消息队列使用,用rpush和lpush操作入队列...

  • GCD中串行队列和并行队列的同步与异步操作

    GCD中的队列可以归类为以下四种类型,分别进行同步和异步操作 1.同步操作 a.串行队列 b.主队列 c.并行队列...

  • iOS多线程中NSOperation和GCD的区别

    一、NSOperation 1、核心概念:把操作(异步)添加到队列(全局的并发队列) 2、OC 框架,更加面向对象...

  • 项目经验

    设计技巧:1、回调处理(调用方回调处理)2、批量操作(批量操作提高性能)3、mq + 异步化(消息队列+多线程异步...

  • learn-promise

    异步计算,异步操作队列化,按照期望的顺序执行。可以在对象间传递操作promise 优点:1.可读性好 2返回的值可...

  • 读书笔记 多线程 -- OperationQueue

    NSOperationQueue是基于Objective-C封装的异步对象操作队列,特点: (1)任务定义可以基于...

  • NSOperation简单使用

    NSOperationQueue 本质上是GCD的全局队列,并发队列。NSOperation 操作是异步任务。只要...

  • GCD多线程异步 一图流

    注意: 1.在主队列中(get_main_queue),只能进行异步操作,如果把同步操作加入到主队列里则死锁,因为...

网友评论

    本文标题:关于队列的生活实例-redux-sagas异步操作(1)

    本文链接:https://www.haomeiwen.com/subject/ifrjuttx.html