当前位置:首页 > 文章 > 正文内容

javascript编程单线程之同步模式

廖万里3年前 (2022-10-27)文章12986

主流的js 环境都是单线程吗模式执行js 代码, js采用为单线程的原因与最开始设计初衷有关,最早是运行在浏览器端的脚本语言,目的是为了实现页面上的动态交互,实现页面交互的核心就是dom操作,这也就决定了js必须使用单线程的模式来处理,不然就会造成严重的线程同步问题。如果js多个线程同时修改dom元素,此时浏览器就无法明确以那个线程的结果为准,为了避免这种线程同步问题,所以从一开始js就被设置成了单线程模式工作。这里所说的单线程指的是javascript执行环境中负责执行代码的线程只有一个

可以想象成只有一个人来执行任务,一个人一次只能执行一个任务,如果有多个任务就需要排队依次去完成。这种模式最大的优点是更安全更简单,缺点也很明显,遇到某一个特别耗时的任务后面的任务就需要等这个任务的结束,这也就导致整个程序的执行的拖延,出现假死的情况。

  • 优点:更安全、更简单

  • 耗时任务会出现程序假死的情况

为了结局耗时任务的问题,javscript 把 任务的执行分了两种模式,分别是

  • 同步模式(Synchoronous)

  • 异步模式(Asynchronous)

javascript编程单线程之同步模式

同步模式Synchoronous

代码依次执行,后一个任务要等待前一个任务执行完成,同步执行比较简单,代码的执行顺序就是代码的顺序。单线程大部分都是同步模式。

Console 是输出的打印,Call stack 是执行栈

开始执行 js 会把我们的整体的代码加载进来并放到一个匿名函数里面执行,然后逐行开始执行,

第一行 执行会把 console.log('global begin') 压入调用栈中,控制台打印global begin 执行结束,弹出调用栈

接下来是两个函数的声明,函数的声明不会产生调用所以接着往下执行

接下来是一个foo 函数的调用,会把 foo压入调用栈,foo 函数打印了一个消息,接着执行了 bar 函数,bar 函数也会被放入执行栈中,bar函数执行过程中又打印了一次,bar执行完毕弹出调用栈,紧接着 foo函数也执行结束,弹出调用栈

最后打印了一个消息,也是一样的压栈,整体代码执行完,执行栈就会被清空掉

javascript编程单线程之同步模式

这种排队执行的机制下某行代码执行时间过长,后面的任务就会被延迟。我们把这种延迟称为阻塞,这种阻塞对于用户而言会有页面卡顿或者叫卡死,所以需要异步模式来解决程序中无法避免的耗时操作,比如ajax操作,或者nodejs中的大文件读写


本文链接:https://www.kkkliao.cn/?id=162 转载需授权!

分享到:

版权声明:本文由廖万里的博客发布,如需转载请注明出处。


“javascript编程单线程之同步模式” 的相关文章

马斯克倡议设台湾特别行政区,台地区专家:不希望台海冲突,反映商人普遍心声

马斯克倡议设台湾特别行政区,台地区专家:不希望台海冲突,反映商人普遍心声

 美国电动车大厂特斯拉公司创办人马斯克针对台海紧张局势,提出中国将台湾地区设为“特别行政区”方案。彰化师范大学创意创新创业研究中心主任王信文接受香港中评社访问表示,特斯拉电动车有75%的供应链来自台湾,马斯克当然不希望台海冲突,波及商业发展,这某方面也反映商人普遍心声,商人会作此呼吁,代表已嗅到战争...

美媒:ASML开始被中企无情地“打脸”了

美媒:ASML开始被中企无情地“打脸”了

点击关注,每天精彩不断!导读:美媒:ASML开始被中企无情的“打脸”了!自从我国华为公司被打压以后,很多科技企业都意识到了自主研发和生产半导体芯片的重要性;而想要生产芯片并不是一件容易的事情;作为21世纪最伟大的发明之一,半导体芯片如今在整个科技领域都起着至关重要的作用,虽然说一个小小的芯片看上去只...

马云即便隐退了,眼光依旧毒辣,退出前的发言值得深思

马云即便隐退了,眼光依旧毒辣,退出前的发言值得深思

(ps:灰色的文字为马云的发言,黑色为作者的补充解读,更助于各位理解)马云发言:过去的这一年,很不寻常,事件发生了巨大的变化。疫情也带来了巨大的挑战,在今天所有巨大的不确定当中,有一件事是确定无疑的。那就是数字化的趋势没有改变。数字化以前只是让一些企业活得更好。而今天是企业活下去的关键,数字化的进程...

这才是华为手机正确的截屏方法,居然有9种不同的功能,太强大了

这才是华为手机正确的截屏方法,居然有9种不同的功能,太强大了

说起华为手机的截屏功能,很多朋友都会想到“指关节截屏”,这是华为手机特有的一种截屏方式。但是大家知道吗?其实除了“指关节截屏”,华为手机还有很多截屏的方法,有一些是非常实用的。平时我们发现一些有意义的画面、或者好看的视频,都可以用截屏的方式保存下来,因此多掌握几种截屏方法,还是很有帮助的!这篇文章就...

2022年浏览器行业前景:手机浏览器产品趋于智能化

2022年浏览器行业前景:手机浏览器产品趋于智能化

我们遇到不懂的问题,第一反应可能就是用浏览器搜索一下答案,就可以找到自己想了解的东西。我国的手机浏览器已经逐渐走向成熟,浏览器产品趋于智能化,各大手机浏览器竞争激烈。国产手机浏览器企业如果想要在市场上占有一席之位,不仅要在技术上下功夫,也要在商业模式上创新。以下是对2022年手机浏览器行业前景分析。...

Linux服务器离线安装 nginx的详细步骤

Linux服务器离线安装 nginx的详细步骤

目录linux服务器 离线安装 nginx1.资源2.安装步骤常用命令操作启动nginx停止nginx重启nginx查看端口占用Linux服务器 离线安装 nginx1.资源nginx-1.20.1.tar.gz(下载链接中包含gcc、g++、pcre、libtool、nginx)百度网盘下载:链接...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。