JavaScript 进阶实战课
石川
JavaScript Patterns and Anti-Patterns 等开源项目创建者,O'Reilly 技术评审
15066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
JavaScript 进阶实战课
15
15
1.0x
00:00/00:00
登录|注册

16 | 为什么环形队列适合做Node数据流缓存?

你好,我是石川。
前面几讲讲完了栈这种数据结构,我们再来看看队列(queue)。队列对于你来说,可能不算是一种陌生的数据结构,和栈相反,列队通常遵循的是先进先出(FIFO,First In, First Out)的原则。你可以把它想象成在咖啡厅买咖啡时要排的队,基本是先到先得,最后来的最后买到,不能插队。如果你强行插队的话,那每个人的排队时长都会打乱。
只是实现一个队列并不复杂,重要的是,你要理解队列在编程中的应用。既然我们在讲 JS,就举几个身边的例子,比如我们的浏览器就是通过引擎来做线程和任务的管理。在使用 Node 的应用中,环形队列可以用来做数据流的缓存。这一讲,首先我们快速地了解下队列的核心,然后通过它在 JS 引擎了解它们的使用场景,最后我们通过学习一种特殊的环形队列来解答开篇的问题,就是为什么环形队列适合用来缓存数据流。

如何实现队列和双队列

首先,我们来看看如何实现一个简单的队列。数据结构中队列的核心思想和我们排队买票看电影一样,关键是谁排在前面,谁就可以先买到票。和排队一样,在数据结构中,我们可以有入队、出队的概念。入队(enqeue),顾名思义就是在队伍后面加了一个人排队。这里的实现和我们看的栈里面的入栈是类似的,所以也可以用 push 来完成。下面我们再来说说出队,按照先入先出的规则,排在最前面的人买完票了以后,就会出队(dequeue)。它的实现可以通过 JavaScript 中自带的 shift,通过 shift,我们可以去掉一个数组里面最开头的一个元素。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了环形队列在数据流缓存中的应用以及Chromium浏览器中的线程管理方式。首先介绍了环形队列的基本概念和实现方法,强调了其在缓存数据流中的优势,以及在浏览器线程管理中的应用。随后,通过解释Chrome浏览器如何通过队列来实现线程管理,展示了Chromium的多进程架构和线程管理方式。文章指出Chromium采用任务队列的方式通过事件循环给到UI主线程,处理任务的结果通过消息传递给主线程,同时介绍了Chromium中的线程池和虚拟线程管理的概念。最后,文章举例说明了Chromium中的锁结构的使用情况。整体而言,本文通过实际例子和比喻生动地解释了环形队列在数据流缓存中的应用,以及Chromium浏览器中的线程管理方式,为读者提供了深入理解环形队列和线程管理的知识。文章内容丰富,涵盖了环形队列的原理、实现方法以及在实际应用中的场景,对于想要深入了解队列和线程管理的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《JavaScript 进阶实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 穷精致
    “为什么环形队列适合做 Node 数据流缓存?你可能会问这样的队列为什么会有用?那是因为它最核心的好处是当一个数据元素被用掉后,其余数据元素不需要移动其存储位置。”这句话我理解是队列里的一个数据释放掉之后,不被释放的空间可以继续写入别的数据,不会造成内存上的浪费?
    2023-02-11归属地:北京
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部