JS执行机制--同步与异步

这篇具有很好参考价值的文章主要介绍了JS执行机制--同步与异步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单线程
JavaScript语言具有单线程的特点,同一个时间只能做一件事情。这是因为JavaScript脚本语言是为了处理页面中用户的交互,以及操作DOM而诞生的。如果对某个DOM元素进行添加和删除,不同同时进行。应该是先添加,再删除,事件有序。

单线程的特点是所有任务都需要排队进行,前一个任务结束,才会执行后一个任务。这样会导致问题:如果JS执行时间过长,这样会导致页面渲染不连贯,导致页面渲染加载阻塞。

同步与异步
为了解决这个问题,利用多核 CPU 的计算能力,HTML5 提出 Web Worker 标准,允许 JavaScript脚本创建多个线程,JS中出现了同步和异步。
同步
前一个任务结束后再执行后一个任务
如:

console.log(1);
console.log(2);
console.log(3);
// 1 2 3

异步
在做这件事的同时,你还可以去处理其他事情
如:

console.log(1);
setTimeout(function() {
    console.log(3);
},1000);
console.log(2);
// 1 2 3

如果按同步执行,要先通过定时器执行完才执行下一步,浏览器效率大大降低。
所以异步可以先打印 2 等定时器时间到再打印3

事件循环

如果这样,结果打印的是什么呢?

console.log(1);
setTimeout(function() {
    console.log(3);
},0);
console.log(2);
  • JavaScript的同步任务在主线程中执行,形成一个执行栈
  • 异步任务通过回调函数实现,把任务添加到任务队列中

执行步骤:

  1. 先执行执行栈中的同步任务
  2. 异步任务(回调函数)放入任务队列中
  3. 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行

JS执行机制--同步与异步

所以上面打印的结果还是1 2 3
类似的

console.log(1);
document.onclick = function() {
    console.log('click');
}
console.log(2);
setTimeout(function() {
    console.log(3)
}, 3000)
// 打印1 2 如果点击了,打印click,无论是否点击3秒后都打印3

同步任务放在执行栈中执行,异步任务由异步进程处理放到任务队列中,执行栈中的任务执行完毕会去任务队列中查看是否有异步任务执行,由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环( event loop)

JS执行机制--同步与异步

执行步骤

JS执行机制--同步与异步

 文章来源地址https://www.toymoban.com/news/detail-419124.html

到了这里,关于JS执行机制--同步与异步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA的回调机制、同步/异步调用

    同步调用是最基本的调用方式。类A的a()方法调用类B的b()方法, 类A的方法需要等到B类的方法执行完成才会继续执行 。如果B的方法长时间阻塞,就会导致A类方法无法正常执行下去。 如果A调用B,B的执行时间比较长,那么就需要考虑进行异步处理,使得B的执行不影响A。通常

    2024年02月14日
    浏览(39)
  • 【已解决】C语言实现多线程的同步与异步

    说真的写了这篇博文时,才知道c语言本身不支持多线程,而是一些windowsapi让c语言拥有多线程的能力,那下面内容就以打开对话框为例,展现如何实现多线程的同步与异步。 想要实现c语言打开多个对话框的多线程同步与异步 代码效果 对代码的查阅会发现,关键在于定义多线

    2024年02月02日
    浏览(39)
  • js 同步与异步

    一、js 执行机制 JavaScript语言的一大特点就是 单线程 ,即(同一时间只能做一件事情)。因为JavaScript是为了处理页面中用户的交互,以及操作DOM而诞生的。比如对某个DOM元素进行添加和删除操作。不能同时进行,应该先进行添加,再进行删除。 单线程就意味着,所有任务需

    2024年02月06日
    浏览(36)
  • Linux 多线程同步机制(上)

    “同步” 的目的 是为了避免数据的混乱,解决与时间有关的错误。实际上,不仅线程需要同步,进程间,信号间等等都需要同步机制。 线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时 其他线程为保证数据的一致性,不能调用该功能。

    2024年02月10日
    浏览(33)
  • 使用多线程执行任务,并获取返回结果,附异步实现

    这里创建了一个包含三个线程的固定线程池 线程池的介绍 根据主机情况实现自定义线程池: 也可以通过继承 ThreadPoolExecutor 类来实现一个自定义线程池工具类。ThreadPoolExecutor 是 Java 标准库中提供的一个线程池实现,通过继承它,我们可以实现自定义的线程池。 下面是一个继

    2024年02月16日
    浏览(40)
  • JS设置Ajax为同步或异步

    在使用 AJAX(Asynchronous JavaScript and XML)时,可以通过设置 XMLHttpRequest 对象的 async 属性来控制请求是同步(synchronous)还是异步(asynchronous)。 异步(Asynchronous) :如果 async 属性设置为 true ,则 AJAX 请求是异步的。这意味着 JavaScript 不会等待服务器的响应,而是继续执行其他

    2024年04月27日
    浏览(30)
  • 单线程、同步、异步、预解析、作用域、隐式全局变量、对象创建、new

    cpu 资源分配的最小单位 一个进程可以有多个线程 cpu 调度的最小单位 线程建立在进程的建立基础上的一次程序的运行单位 线程分为:单线程 多线程 单线程:js是单线程 (同一个时间只能完成一个任务) 多线程:百度是多线程 同步任务是指在主线程上排队的任务,只有当前

    2024年01月22日
    浏览(48)
  • js中如何让将异步变成同步

    JavaScript中可以使用 async/await 将异步操作转换为同步的方式执行。async/await是ES2017(也称ES8)新增的语法,它可以让异步请求看起来像同步代码一样,更加简洁易懂。 async 用于声明一个函数为异步函数,该函数执行时返回一个Promise对象,表示当前函数执行的结果。在函

    2024年02月16日
    浏览(33)
  • Python多线程与线程池(python线程池ThreadPoolExecutor)concurrent.futures高级别异步执行封装

    在进行复杂的计算或处理大量数据时,可以通过创建多个线程来同时执行多个任务,从而提高程序的执行效率。这种技术称为多线程编程。 1.1 线程简介 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一

    2024年02月12日
    浏览(31)
  • 正则,JS:this,同步异步,原型链笔记整理

    正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用来按照“给定模式”匹配文本 正则表达式可以用于以下常见操作: 匹配:判断一个字符串是否符合某个模式。 搜索:在文本中查找符合某个模式的子串。 替换:将文本

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包