JS单线程
发布日期:2021-11-21 16:35:33
浏览次数:10
分类:技术文章
本文共 649 字,大约阅读时间需要 2 分钟。
JavaScript通过处理页面中用户的交互,以及操作DOM树、CSS样式树来给用户呈现一份动态而丰富的交互体验和服务器逻辑的交互处理。
如果JavaScript以多线程的方式来操作这些UI DOM,则可能出现UI操作的冲突;在多线程的交互下,处于UI中的DOM节点就可能成为一个临界资源,假设存在两个线程同时操作一个DOM,而线程1要求浏览器删除DOM节点,线程2却希望修改这个节点的某些样式风格。这个时候浏览器就无法裁决采用哪一种策略了。可以为浏览器引入“排它锁”或者是“乐观锁”来解决这些冲突,但为了避免引入了更大的复杂性,所以JavaScript从诞生开始就选择了单线程执行。
因为单线程执行,所以对于JavaScript的任务而言,在同一时间内只能执行一个特定的任务,并且它会阻塞其他的任务执行。对于长时间任务执行的时候,那么其他的任务就得不到执行。在软件开发中,特别是应用软件开发中,对于I/O设备的访问都是一些及其耗时的操作。在这些耗时任务执行的时候,其实并没必要等待它的完成,在I/O任务完成之前JavaScript完全可以继续执行其他的任务,直到I/O任务完成后再继续执行该任务的处理就行。JavaScript在设计之初,就意识这一点。所以在JavaScript中将这些耗时的I/O等操作封装为了异步的方法,等到这些任务完成后就将后续的处理操作封装为JavaScript任务放入执行任务队列中,等待JavaScript线程空闲的时候被执行。因此这里形成了“浏览器的事件循环”机制。转载地址:https://blog.csdn.net/yyychocolate/article/details/108057906 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年03月30日 19时44分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux下挂载U盘
2019-04-27
ubtunu开机黑屏无桌面解决方法
2019-04-27
Linux开发_退格符的花样用法
2019-04-27
Linux开发_判断程序是否以管理员权限运行(root/sudo)
2019-04-27
Windows核心编程_实现QQ好友来消息时任务栏头像闪烁功能
2019-04-27
CMake构建_增加编译选项(debug&&release)
2019-04-27
Cmake构建_指定gcc/g++版本
2019-04-27
Cmake构建_设置全局编译选项
2019-04-27
Cmake构建_设置debug与release不同名字
2019-04-27
Cmake构建_设置debug与release输出路径
2019-04-27
Cmake构建_选择debug与release的库
2019-04-27
Http响应码含义
2019-04-27
Windows核心编程_修改U盘图标
2019-04-27
迅雷:下载时提示“文件创建失败,无法继续下载”的解决办法
2019-04-27
爬虫:Python爬虫学习笔记之网页解析基础——爬取360导航栏目
2019-04-27
实战Python:利用Python实现基于终端的文本行编辑程序
2019-04-27
Python:学习笔记之PyQt5
2019-04-27
面向对象(Python):学习笔记之封装
2019-04-27
Python:字符串、列表、元组、字典之间的相互转换
2019-04-27
面向对象(Python):学习笔记之私有属性和私有方法
2019-04-27