iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >javascript中异步和同步有什么区别
  • 905
分享到

javascript中异步和同步有什么区别

2023-06-15 10:06:36 905人浏览 泡泡鱼
摘要

这篇文章给大家介绍javascript中异步和同步有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。区别:在同步中,发出一个功能调用时,必须一件一件事做,等前一件做完了才能做下一件事;而在异步中,当一个异步过程调

这篇文章给大家介绍javascript中异步和同步有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

区别:在同步中,发出一个功能调用时,必须一件一件事做,等前一件做完了才能做下一件事;而在异步中,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。

javascript语言是一门“单线程”的语言,

不像java语言,类继承Thread再来个thread.start就可以开辟一个线程。

所以,javascript就像一条流水线,仅仅是一条流水线而已,要么加工,要么包装,不能同时进行多个任务和流程。

“同步”——一下就让人想到“一起”这个词;


“异步”呢,从字面来讲,好像是在不同的(异)的ways上do something,

那首先想到的词可能是“一边...一边...”,比如‘小明一边吃雪糕一边写作业’,这完全没毛病,雪糕吃完了,作业也写完了,这就是异步?那就大错特错了!


其实同步和异步,

无论如何,做事情的时候都是只有一条流水线(单线程)

同步和异步的差别就在于这条流水线上各个流程的执行顺序不同。

最基础的异步是setTimeout和setInterval函数,

很常见,但是很少人有人知道其实这就是异步,

因为它们可以控制js的执行顺序。我们也可以简单地理解为:

可以改变程序正常执行顺序的操作就可以看成是异步操作。如下代码:

    console.log( "1" );    setTimeout(function() {        console.log( "2" )    }, 0 );    setTimeout(function() {        console.log( "3" )    }, 0 );    setTimeout(function() {        console.log( "4" )    }, 0 );    console.log( "5" );

输出顺序是什么呢?

javascript中异步和同步有什么区别

可见,尽管我们设置了setTimeout(function,time)中的等待时间为0,结果其中的function还是后执行。

尽管setTimeout的time延迟时间为0,

其中的function也会被放入一个队列中,等待下一个机会执行,

当前的代码(指不需要加入队列中的程序)必须在该队列的程序完成之前完成,

因此结果可能不与预期结果相同。

这里说到了一个“队列”(即任务队列),

该队列放的是什么呢,放的就是setTimeout中的function,

这些function依次加入该队列,

即该队列中所有function中的程序将会在该队列以外的所有代码执行完毕之后再以此执行,

这是为什么呢?因为在执行程序的时候,浏览器会默认setTimeout以及ajax请求这一类的方法都是耗时程序(尽管可能不耗时),
将其加入一个队列中,该队列是一个存储耗时程序的队列,在所有不耗时程序执行过后,再来依次执行该队列中的程序。

又回到了最初的起点——javascript是单线程。 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。
如果前一个任务耗时很长,后一个任务就不得不一直等着。

于是就有一个概念——任务队列。如果排队是因为计算量大,CPU忙不过来,倒也算了,

但是很多时候CPU是闲着的,因为IO设备(输入输出设备)很慢(比如Ajax操作从网络读取数据),不得不等着结果出来,再往下执行。于是JavaScript语言的设计者意识到,这时主线程完全可以不管IO设备,挂起处于等待中的任务,先运行排在后面的任务。等到IO设备返回了结果,再回过头,把挂起的任务继续执行下去。

于是,所有任务可以分成两种,

一种是同步任务(synchronous),另一种是异步任务(asynchronous)。 同步任务指的是,在主线程上排队执行的任务,
只有前一个任务执行完毕,才能执行后一个任务; 异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。

具体来说,异步运行机制如下:


  • 所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。

  • 主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。

  • 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。

  • 主线程不断重复上面的第三步。


只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。这个过程会不断重复。

"任务队列"中的事件,除了IO设备的事件以外,

还包括一些用户产生的事件(比如鼠标点击、页面滚动等等),

比如$(selectot).click(function),这些都是相对耗时的操作。

只要指定过这些事件的回调函数,这些事件发生时就会进入"任务队列",等待主线程读取。

所谓"回调函数"(callback),就是那些会被主线程挂起来的代码,前面说的点击事件$(selectot).click(function)中的function就是一个回调函数。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。例如ajax的success,complete,error也都指定了各自的回调函数,这些函数就会加入“任务队列”中,等待执行。

关于javascript中异步和同步有什么区别就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: javascript中异步和同步有什么区别

本文链接: http://www.lsjlt.com/news/279786.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javascript中异步和同步有什么区别
    这篇文章给大家介绍javascript中异步和同步有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。区别:在同步中,发出一个功能调用时,必须一件一件事做,等前一件做完了才能做下一件事;而在异步中,当一个异步过程调...
    99+
    2023-06-15
  • java中异步和同步有什么区别
    java中异步和同步有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对...
    99+
    2023-06-14
  • java异步和同步的区别是什么
    这篇文章主要介绍“java异步和同步的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java异步和同步的区别是什么”文章能帮助大家解决问题。区别异步和同步的区别一般是调用方是否需要等待结果...
    99+
    2023-06-30
  • mysql同步复制和异步复制有什么区别
    这篇文章主要介绍mysql同步复制和异步复制有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!区别:异步复制是Master将事件写入binlog,提交事务,自身并不知道slav...
    99+
    2024-04-02
  • kafka同步发送和异步发送有什么区别
    Kafka的同步发送和异步发送是两种不同的消息发送方式。1. 同步发送:同步发送是指发送方发送一条消息后,会立即等待服务器的响应。只...
    99+
    2023-10-12
    kafka
  • java同步和异步的区别有哪些
    Java中同步(Synchronous)和异步(Asynchronous)的区别主要体现在程序的执行方式和处理结果上。1. 执行方式...
    99+
    2023-08-09
    java
  • ajax同步和异步的区别有哪些
    这篇文章主要讲解了“ajax同步和异步的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ajax同步和异步的区别有哪些”吧! ...
    99+
    2024-04-02
  • Python中同步与异步的区别是什么
    今天就跟大家聊聊有关Python中同步与异步的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. “同步”和“异步”是什么意思?Web 应...
    99+
    2024-04-02
  • PHP同步与异步的区别是什么
    这篇文章主要介绍“PHP同步与异步的区别是什么”,在日常操作中,相信很多人在PHP同步与异步的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP同步与异步的区别是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-25
  • AJAX中请求方式以及同步异步有什么区别
    这篇文章主要介绍AJAX中请求方式以及同步异步有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 请求方式,分为GET与POST: GET 最为常...
    99+
    2024-04-02
  • Python框架中的同步关键字和异步框架有什么区别?
    Python是一种高级编程语言,广泛用于Web应用程序的开发。Python框架中的同步关键字和异步框架是Web开发中的两个重要概念。同步关键字是一种常见的编程方式,它指的是在代码执行期间,代码中的操作必须按照顺序执行。而异步框架则是指在代...
    99+
    2023-06-24
    同步 关键字 框架
  • 如何理解ajax中的async属性值同步和异步及同步和异步区别
    这篇文章给大家介绍如何理解ajax中的async属性值同步和异步及同步和异步区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。jquery中ajax方法有个属性async用于控制同步和...
    99+
    2024-04-02
  • 异步计数器与同步计数器有什么区别
    本篇文章为大家展示了异步计数器与同步计数器有什么区别,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。操作环境:windows7系统、Dell G3电脑。同步计数器同步计数器指的是被测量累计值,其特点是...
    99+
    2023-06-06
  • node同步与异步的区别有哪些
    这篇“node同步与异步的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“node...
    99+
    2024-04-02
  • Java 同步和 Spring 同步的区别是什么?
    在 Java 编程中,同步是一种机制,用于控制多个线程访问共享资源的方式。同步允许线程相互协调,以确保在共享资源上的正确和一致的访问。Java 中的同步机制有两种:synchronized 和 Lock。而在 Spring 框架中,同步的...
    99+
    2023-09-22
    面试 同步 spring
  • Python异步与 JavaScript 原生异步的区别是什么
    本篇文章为大家展示了Python异步与 JavaScript 原生异步的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。现在假设我们要请求一个网址:http://httpbin.org/de...
    99+
    2023-06-16
  • 怎么在JavaScript中实现同步和异步
    本篇文章为大家展示了怎么在JavaScript中实现同步和异步,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点击,给用户提供更好的...
    99+
    2023-06-14
  • GO语言和Javascript中的对象同步:有什么区别和联系?
    随着计算机科学的发展,越来越多的编程语言被开发出来。其中,GO语言和Javascript都是非常流行的编程语言。在这两种语言中,对象同步是一个非常重要的话题。在本文中,我们将讨论GO语言和Javascript中的对象同步,比较它们之间的区别...
    99+
    2023-09-15
    对象 同步 javascript
  • java 中同步、异步、阻塞和非阻塞区别详解
    java 中同步、异步、阻塞和非阻塞区别详解简单点说:阻塞就是干不完不准回来,一直处于等待中,直到事情处理完成才返回; 非阻塞就是你先干,我先看看有其他事没有,一发现事情被卡住,马上报告领导。我们拿最常用的send和recv两个函数来说吧....
    99+
    2023-05-31
    java 同步 异步
  • Python同步与异步有什么不同
    本文小编为大家详细介绍“Python同步与异步有什么不同”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python同步与异步有什么不同”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。“同步”和“异步”是什么意思?...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作