Java教程

【金秋打卡】第4天 JavaScript版数据结构与算法- 数据结构之“队列”

本文主要是介绍【金秋打卡】第4天 JavaScript版数据结构与算法- 数据结构之“队列”,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

课程名称: JavaScript版数据结构与算法
课程章节: 数据结构之“队列”
课程讲师: lewis
课程内容:

课程介绍

第4章 数据结构之“队列”
4-1 队列简介
4-2 什么场景用队列
4-3 LeetCode:933. 最近的请求次数
4-4 前端与队列:JS 异步中的任务队列
4-5 队列-章节总结


一、什么是队列

队列是一种先进先出(First in First Out)的数据结构,简称 FIFO。
图片描述

啥叫先进先出呢?这就和排队打饭,谁先到谁先有饭,到的晚的只能忍住。

同比栈,队列在软件应用中也很常见,就像现在我在一个字母一个字母的敲,最后输出在屏幕上你看到的一个个的字,这些就是最常见的队列的应用。
还有就是 我们去检测点排队做核酸检测:队伍里第一个到达护士小姐姐那里的居民会是第一个从集中检测点走出来的人,小姐姐每检测完一位,整个队伍里所有的居民就向前挪动一个位置。(一般解释这个都用的是超市排队结账模型)
如果我们规定这个队列最多有N个人,并且有很多的居民正在广场上等着进入这个检测队列,每检测完一人则队伍出去一人并进来一人,则FIFO队列有以下特点:
(1) 队列中始终保持着N个数据元素;
(2) 队列中的数据元素包含最新的数据以及N-1个较老的数据;
图片描述

二、什么状态下使用队列

软件开发中队列的经典应用场景就是消息队列.
1、异步处理
场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种:串行的方式和并行方式。
串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户。
并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。
假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。

因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100)。

小结:如以上案例描述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢?

引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下

按照以上约定,用户的响应时间相当于是注册信息写入数据库的时间,也就是50毫秒。注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。因此架构改变后,系统的吞吐量提高到每秒20QPS。比串行提高了3倍,比并行提高了两倍!

三、总结

本节课主要通过JS的数组模拟了队列的用法,后续在实际应用中继续深入理解和运用。
图片描述

这篇关于【金秋打卡】第4天 JavaScript版数据结构与算法- 数据结构之“队列”的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!