Javascript线程分析
来源:互联网 发布:购买的域名如何使用 编辑:程序博客网 时间:2024/06/07 04:43
通常一个浏览器会至少存在四个线程:JS引擎线程(用于处理JS)、GUI渲染线程(用于页面渲染)、浏览器时间触发线程(用于控制交互),Http请求线程。 上面页面显示不出hello world说明JS引擎线程的死循环导致GUI渲染线程的阻塞。
而因为JS可以操作DOM元素,进而会影响到GUI的渲染结果,因此JS引擎线程与GUI渲染线程是互斥的。也就是说当JS引擎线程处于运行状态时,GUI渲染线程将处于冻结状态。
JS引擎是基于事件驱动,采用的是单线程运行机制。即JS引擎会只会顺序的从任务列表中取任务,并执行。
SetTimeout/SetInternal
其中 SetTiemout:在指定的毫秒数后调用指定的代码段;SetInternal:在指定的时间间隔内(ms)循环调用指定的代码段。这两个函数内都涉 及到时间计数器,也就是都涉及到一个类似与MFC定时器。JS引擎本身就只能单线程运行,因此定时器需要由其他的外部线程来启动。所以对JS引擎而言,定 时器线程可以被视为异步线程。但当定时器时间到达后,所触发的事件则必须在任务列表中排队,等候JS引擎的处理。
关于setTimeout下面有一个例子,可以帮助深入理解:
- setTimeout(function () { while (true) { } }, 1000);
- setTimeout(function () { console.log('end 2'); }, 2000);
- setTimeout(function () { console.log('end 1'); }, 100);
- console.log('end');
执行的结果是输出‘end’‘end 1’,然后浏览器假死,就是不输出‘end 2’。也就是说第一个settimeout里执行的时候是一个死循环,这个直接导致了理论上比它晚一秒执行的第二个settimeout里的函数被阻塞, 这个和我们平时所理解的异步函数多线程互不干扰是不符的。
- <script type="text/javascript">
- while(true){
- console.log("1")
- }
- </script>
- hello world
0 0
- Javascript线程分析
- Javascript是单线程的深入分析
- Javascript是单线程的深入分析
- Javascript是单线程的深入分析
- Javascript是单线程的深入分析
- Javascript是单线程的深入分析
- Javascript是单线程的深入分析
- Javascript是单线程的深入分析
- Javascript是单线程的深入分析
- Javascript单线程及定时器原理分析(1)
- 【转】Javascript是单线程的深入分析
- JavaScript 线程
- JavaScript线程
- javascript线程
- 线程分析
- 线程分析.....
- Java线程Daemon线程分析
- javascript模拟线程功能
- catmaid主分支笔记
- 什么是自适应学习(个性化学习)?
- 量化投资--量化干货分享
- SQLite3数据库在嵌入式应用之三: 以日志功能为例给出常用命令和C/C++常用API
- redis 删除 模糊匹配字段
- Javascript线程分析
- MicroPython - 下载
- python常用文件处理命令
- Android性能分析工具常用汇总
- 【Java】内存机制详解(new操作的执行原理)
- java对象初始化时的静态块和构造块
- 116. Populating Next Right Pointers in Each Node
- Android面试必考十大试题详解,高手勿入!
- 设置session的时间