当前位置: 首页 > news >正文

JavaScript 俄罗斯方块 - setTimeout和rAF

本节内容需要有些基础知识,如进程和线程,队列数据结构

一、setTimeout和setInterval

只要使用过JavaScript的朋友,对setTimeout和setInterval应该不会默生,如果光说怎样去使用这个API,并不难,无非就是隔多少毫秒再执行某个函数,把变化的内容封装在函数中,就可以制作出动画效果,这也是最初写JavaScript时的常见写法,多年以前的IE6时代我对这个函数的印象就是它是用来做网页动画特效的,由于IE6浏览器并未开放源码,那这个定时任务到底是怎样执行的呢?只能去官方通过文档了解。后来,Google浏览器Chrome V8引擎是开源,通过源码,可以了解到JavaScript的setTimeout是怎样实现的了,关键部分就是消息队列和事件循环, 把任务放到了队列中,隔一定时间再把它取出来执行,我们知道浏览器渲染进程中所有运行在主线程上的任务都需要先添加到消息队列,然后事件循环系统再按照顺序执行消息队列中的任务.

在Java NIO中的也是相类似的玩法,开一个线程,在线程中不断的轮询是否有TCP连接事件或是读写事件,如果有则进入循环并判断是哪种任务并给出相应的处理逻辑,在NIO出现前,用IO写服务器,同样会开一个线程,只是accept方法是要阻塞并等待

// 轮询,且返回时有就绪事件
while (selector.select() > 0){ 
    // 获取就绪
http://www.lryc.cn/news/25260.html

相关文章:

  • LeetCode:构造最大二叉树;使用中序和后序数组构造二叉树;使用前序和中序数组遍历二叉树。
  • nodejs实现jwt
  • 结构体占用内存大小如何确定?-->结构体字节对齐 | C语言
  • Vue和Uniapp:优缺点比较
  • AMBA-AXI(二)AXI的序,保序与乱序
  • APIs and Open Interface--非工单领、发料(含调拨)
  • 互联网医院系统软件开发|互联网医院管理系统开发的好处
  • 2.单例模式
  • 【保姆级】Java后端查询数据库结果导出xlsx文件+打印xlsx表格
  • Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
  • vue3生命周期
  • Python学习笔记10:开箱即用
  • 详解JAVA反射
  • 在nestjs中进行typeorm cli迁移(migration)的配置
  • 前端工程构建问题汇总
  • 某马程序员NodeJS速学笔记
  • SpringMVC DispatcherServlet源码(6) 完结 静态资源原理
  • 2023年全国最新会计专业技术资格精选真题及答案9
  • Web3中文|把Web3装进口袋,Solana手机Saga有何魔力?
  • 【配电网优化】基于串行和并行ADMM算法的配电网优化研究(Matlab代码实现)
  • 数据结构初阶 -- 顺序表
  • uniapp:3分钟搞定在线推送uni.createPushMessage,uni.onPushMessage
  • C/C++开发,无可避免的多线程(篇一).跨平台并行编程姗姗来迟
  • 如何把照片的底色修改为想要的颜色
  • 【高效办公】批量生成固定模板的文件夹名称
  • redis的集群方式
  • 温控负荷的需求响应潜力评估及其协同优化管理研究(Matlab代码实现)
  • 模电学习9. MOS管使用入门
  • 【算法】【数组与矩阵模块】正数组中累加和为给定值的最长子数组长度,空间复杂度O(1)解法
  • 3.1.2 创建表