JavaScript:异步编程

2023-11-02

异步编程是一种编程模式。

JavaScript 是单线程的,只有一个线程可以执行代码。

这意味着,所有代码都只能在一个线程中按顺序执行,这很容易导致代码执行的阻塞。

代码的每一个语句都需要被执行,为了完成某个计算任务需要一定的执行时间。不同任务的执行时间之间的差别可能是数量级的。

根据执行时间的数量级(或长短)可以把计算任务粗略分为两种:

  • 简单任务,执行时间的数量级较低(或执行时间较短)的计算任务。
  • 复杂任务,执行时间的数量级较高(或执行时间较长)的计算任务。

线程阻塞,即在执行代码时,先执行了复杂任务,使后面的简单任务一直处于等待状态。

线程阻塞是 “不合理” 的,应该优先执行简单任务,再执行复杂任务。

线程阻塞的解决办法是对任务的执行顺序进行调整,即使用异步编程,即将可能是复杂任务的任务从当前的执行中抛出,在若干任务执行完后再执行被抛出的任务。

这种将计算任务从当前的执行中抛出,在其它若干任务执行完后再执行被抛出的任务的编程模式被称为异步编程


主要参考资料:

  • 《JavaScript 高级程序设计(第4版)》- P322(347/931)

消息队列

为了实

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript:异步编程 的相关文章

随机推荐

  • 机器学习之线性回归:OLS 无偏估计及相关性python分析

    戳上面的蓝字关注我们 作者 alg flody 编辑 Emily 0 回顾 在最近的推送中 先后总结了最小二乘法的原理 两个求解方法 直接法和梯度下降 最后利用这两种思路进行了python实战 在用直接法求出权重参数时 有一个假设是某个矩阵
  • 用BF写一个根据位置值实现指针自增的代码

    BF代码 根据位置值实现指针自增 BrainFuck 实现指针会根据目前位置存储的值来自增 比如 4 8 则指针会移动到 12 即 4 8 目前位置 n 的前3个位置 n 1 n 2 n 3 需要为0以便转移数据 代码 gt lt lt l
  • vue平滑滚动到指定位置

    需求 锚点导航问题 点击导航跳到对应的模块 两种方式 1 滚动盒子滚动到指定高度 scrollTo offsetTop每个模块顶部距离可滚动盒子的顶部偏移的像素值 goAnthor selector const height documen
  • windows中如何将已安装的nodejs高版本降级为低版本

    第一步 先清空本地安装的node js版本 1 按健win R弹出窗口 键盘输入cmd 然后敲回车 或者鼠标直接点击电脑桌面最左下角的win窗口图标弹出 输入cmd再点击回车键 然后进入命令控制行窗口 并输入where node查看之前本地
  • 关于两重viewpager+fragment,再重回第二个viewpager消失问题

    问题 第一次进入第二个viewpager中时没有问题 当第二次次进入第二个viewpager中时 viewpager显示空白 解析 1 在第二个fragment中设置viewpager的适配器时 调用了 ViewPagerAdapter n
  • 大数据导论三——大数据技术

    大数据技术层面及其功能 数据采集和预处理 功能 利用ETL工具将分布的数据 抽取到临时中间层后进行处理 最后加载到数据仓库中 成为联机分析处理 数据挖掘的基础 利用日志采集工具把实时采集的数据作为流计算的输入 进行实时处理分析 利用网页爬虫
  • ruoyi-vue整合tdengine多数据源

    ruoyi vue整合tdengine多数据源 实现方式一 在application druid yml配置从库数据源 多数据源使用 注意事项 实现方式二 在application druid yml配置从库数据源 添加TDengineCo
  • 旋转链表(图解说明)

    Leetcode题目描述 题目链接 旋转链表 题目很简洁 就是移动节点 但其中有隐含的意思 要将链表的每个节点向右移动 使每个节点在新的位置 由于尾结点后面没有了节点 要移动就要形成环 所有的节点在环里面转 移动完后又把环断开 形成新的链表
  • Linux -- 线程(一)

    线程 一 线程概念 Linux内核线程实现原理 线程共享资源 线程非共享资源 线程的优点 线程的缺点 创建一个线程 线程的退出 线程退出的注意事项 线程的回收 多线程练习 杀死线程 取消点 线程分离 线程属性 线程属性 分离态 Native
  • C++简单人机交互——走迷宫

    一个简单的小方块走迷宫程序 include
  • webpack 配置介绍

    一 webpack webpack 仅是一个打包工具 不会处理打包过程的东西例如 es6等新特性 如果需要处理这些新特性需要配置单独的加载bebblle loader 等 devDependencies webpack 5 76 3 打包工
  • Android攻城狮—全套必备神级工具(开发,插件,效率)

    http www jianshu com p 0911efbf8009
  • Centos6.4 用rpm方式安装MySql5.6

    1 查看系统是否安装了MySQL 使用命令 rpm qa grep mysql 2 卸载已安装的MySQL 卸载mysql命令如下 rpm e nodeps mysql libs 5 1 61 4 el6 x86 64 要将 var lib
  • 第14.15节 爬虫实战1:使用Python和selenium实现csdn博文点赞

    写在前面 本文仅供参考学习 请勿用作它途 禁止转载 在开始学爬虫时 学习了csdn博客专家 id 明天依旧可好 柯尊柏 实战项目二 实现CSDN自动点赞 的文章 文章介绍了通过Python和selenium模块实现csdn指定文章点赞的过程
  • argis sde 服务连接,arcgis9.3版本场合,arcgis10.2采用直接连接数据库

    1 arc gis 9 3 sde 需要创建 服务 即需要安装arcsde 2 台 或者 多台 机器通过服务连接 2 通过服务连接数据服务
  • JMeter websocket接口测试

    前言 在一个网站中 很多数据需要即时更新 比如期货交易类的用户资产 在以前 这种功能的实现一般使用http轮询 即客户端用定时任务每隔一段时间向服务器发送查询请求来获取最新值 这种方式的弊端显而易见 有可能造成数据更新不及时 如果前端轮询频
  • 黑马程序员----职工管理系统(c++)

    目录 一 项目概要 二 代码 三 演示效果 四 项目注意点 五 一点点感悟 一 项目概要 1 面向角色 普通员工 经理和老板 2 主要功能 增加员工信息 显示员工信息 删除离职员工信息 修改员工信息 查找员工信息 按照编号排序 清空所有文档
  • PVE虚拟化平台之创建虚拟机流程

    PVE虚拟化平台之创建虚拟机流程 一 PVE介绍今天 2022 年 11 月 17 日 有236篇文章可用 二 登录PVE平台 三 登录PVE系统检查环境 1 进入PVE底层系统的shell命令终端 2 检查系统版本 3 检查本地磁盘存储
  • SQLMAP中文翻译详细解读

    H 1 5 5 stable V http sqlmap org 使用示例 python3 sqlmap 选项 选项 h help 显示基础帮助信息然后退出 hh 显示更详细的帮助信息然后退出 version 显示程序版本号然后退出 v V
  • JavaScript:异步编程

    异步编程是一种编程模式 JavaScript 是单线程的 只有一个线程可以执行代码 这意味着 所有代码都只能在一个线程中按顺序执行 这很容易导致代码执行的阻塞 代码的每一个语句都需要被执行 为了完成某个计算任务需要一定的执行时间 不同任务的