JavaScript 是单线程、异步、非阻塞、解释型脚本语言。JavaScript 的设计就是为了处理浏览器网页的交互(DOM操作的处理、UI动画等),决定了它是一门单线程语言。如果有多个线程,它们同时在操作 DOM,那网页将会一团糟。

1.浏览器的渲染进程包含的线程

var a = 111;setTimeout(function() {console.log(222)
}, 2000)fetch(url)  // 假设该http请求花了3秒钟
.then(function() {console.log(333)
})dom.onclick = function() {  // 假设用户在4秒钟时点击了domconsole.log(444)
}console.log(555)// 结果
//555
//222
//333
//444

222,333,444在555之后被输出,也就是说计时器setTimeout、http请求fetch、事件触发器onclick并没有阻塞后面的代码。那,发生了什么?

其实,JavaScript 单线程指的是浏览器中负责解释和执行 JavaScript 代码的只有一个线程,即为 JS引擎线程,但是浏览器的渲染进程是提供多个线程的,如下:

  1. JS引擎线程(主线程)
  2. 事件触发线程(onclick)
  3. 定时触发器线程(setTimeout)
  4. 异步http请求线程(fetch)
  5. GUI渲染线程
  6. EventLoop轮询处理线程

其中,1、2、4为常驻线程

2.消息队列(任务队列)

可以理解为一个静态的队列存储结构,非线程,只做存储,里面存的是一堆异步成功后的回调函数字符串,肯定是先成功的异步的回调函数在队列的前面,后成功的在后面。

注意:是异步成功后,才把其回调函数扔进队列中,而不是一开始就把所有异步的回调函数扔进队列。比如setTimeout 3秒后执行一个函数,那么这个函数是在3秒后才进队列的。

3.1中代码的执行流程如下

步骤1:

主线程只执行了var a = 111;和console.log(555)两行代码,其他的代码分别交给了其他三个线程,因为其他线程需要2、3、4秒钟才成功并回调,所以在2秒之前,主线程一直在空闲,不断的探查队列是否不为空。

此时主线程里其实已经是空的了(因为执行完那两行代码了)

步骤2:

2秒钟之后,setTimeout成功了

步骤3:

步骤4:

参照:https://juejin.im/post/5c2ec3b66fb9a049eb3c1012#comment

转载于:https://www.cnblogs.com/vickylinj/p/10907908.html

[前端]多线程在前端的应用——Javascript的线程相关推荐

  1. 前端开发面试题总结之——JAVASCRIPT(一)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  2. 前端开发面试题总结之——JAVASCRIPT.One

    相关知识点 数据类型.运算.对象.function.继承.闭包.作用域.原型链.事件.RegExp.JSON.Ajax.DOM.BOM.内存泄漏.跨域.异步加载.模板引擎.前端MVC.前端MVVM.路 ...

  3. 熟悉html css,编写HTML和CSS的前端开发中不一定熟悉JavaScript

    原标题:编写HTML和CSS的前端开发中不一定熟悉JavaScript 作为前端开发人员,HTML.css.Java是必备的知识技能,但是现实工作工作中并非所有的前端都知道Java,根据外国一个网站的 ...

  4. web 前端 如何分享到instagram_好程序员web前端教程分享前端javascript练习题三

    好程序员web前端教程分享前端javascript练习题三 cookie 一周内免登录 样式代码: 姓名: 密码: 一周内免登陆 js功能代码: var input=document.getEleme ...

  5. HTML5期末大作业:漫画网站设计——海贼王我当定了(6页) web前端期末大作业 html+css+javascript网页设计实例 企业网站制作 计算机毕设网页设计源码

    HTML5期末大作业:漫画网站设计--海贼王我当定了(6页) web前端期末大作业 html+css+javascript网页设计实例 企业网站制作 计算机毕设网页设计源码 常见网页设计作业题材有 个 ...

  6. HTML5期末大作业:旅行网站设计——开心网旅游(11页) web前端期末大作业 html+css+javascript网页设计实例

    HTML5期末大作业:旅行网站设计--开心网旅游(11页) web前端期末大作业 html+css+javascript网页设计实例 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电 ...

  7. 网页设计作业 开心网旅游(11页) web前端期末大作业 html+css+javascript网页设计实例

    HTML5期末大作业:旅行网站设计--开心网旅游(11页) web前端期末大作业 html+css+javascript网页设计实例 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电 ...

  8. 前端代码规范(阿里) --- Javascript

    程序员写好看的代码,不亚于写一行好看的字 好看的代码总是让人心旷神怡, 不好,不规范的代码,让人看了想说mmp, 那我们就来学习一下规范的代码怎么写的吧 以下来自B站的学习视频:前端必备-阿里大厂前端 ...

  9. 前端学习总结:3、javascript基础

    前端学习总结:3.javascript基础 文章目录 前端学习总结:3.javascript基础 1.概述 1.1 什么是JavaScript? 1.1.1 概念 1.1.2 作用 1.2 JavaS ...

最新文章

  1. 刷题:递归问题与动态规划
  2. Sql Server 2005 ROW_NUMBER 函数实现分页
  3. C#集合类(HashTable, Dictionary, ArrayList)与HashTable线程安全
  4. ASP.NET把DataTable转成XML文件的函数
  5. 隐藏ajax的调用地址,c# – ASP.NET jQuery Ajax调用代码隐藏方法
  6. laravel excel迁移到lumen
  7. php锁定文本框内容的方法
  8. Citrix桌面及应用虚拟化系列之二:XenServer补丁
  9. android 编译时解析xml布局,android – 在xml布局中引用build.gradle versionName属性
  10. 全球芯片短缺将持续到2022年 GPU备货将受影响?
  11. java性能测试jmh
  12. Unable to access “***“, Failed to mount ‘/dev/sda7‘: Operation not permitted
  13. 软件工程uml画图期末考试(新闻发布系统)
  14. EasyExcel导出Excel 自定义 表头颜色
  15. 同步软件UltraCompare 64位 软件及注册机
  16. 纯JS写的小众游戏——走四棋
  17. 华为路由器可以连接几个设备_华为如何设置连接两个无线路由器
  18. 4G和大数据让山西走出一条移动医疗道路
  19. 如何屏蔽掉电脑上因下载软件捆绑的广告(烦人的广告让人十分尴尬)
  20. 农业观光温室大棚都有哪些类别

热门文章

  1. 优秀!腾讯AI Lab开源模型压缩与加速框架PocketFlow!
  2. linux xchgl 汇编含义,替换x86 xchgl 汇编指令
  3. Python的优缺点介绍
  4. ROS 与 Matlab/Simulink联合仿真测试(1)
  5. ArcGIS学习路线
  6. 国土空间规划中工作底图如何制作
  7. 展示面-网络安全相关学习总结
  8. 显卡风扇不转电脑黑屏_隔壁妹子电脑坏了怎么办,简单易懂电脑维修方法与技巧收藏备用...
  9. 消息中间件kafka与activeMQ、rabbitMQ、zeroMQ、rocketMQ的比较
  10. Java基础---方法1