美文网首页
Javascript同步、异步与事件循环

Javascript同步、异步与事件循环

作者: 五秋木 | 来源:发表于2019-10-22 15:14 被阅读0次
  1. Javascript是单线程的
    JS引擎中负责解释和执行JavaScript代码的线程只有一个,主线程
    处理AJAX请求的线程、处理DOM事件的线程、定时器线程、读写文件的线程(Node.js)称为工作线程

  2. 同步与异步
    函数A(arg…),函数返回的时候,调用者就能够拿到预期结果,即拿到了预期的返回值或者看到了预期的效果,这个函数就是同步的
    函数A返回的时候,还得不到预期结果,而是需要在将来通过一定的手段得到,那么这个函数就是异步的。

    fs.readFile('foo.txt', 'utf8', function(err, data) {
    console.log(data);
    });
    

    Fs.readFile函数返回时,期望的结果并不会出现,要等到文件全部读取完成之后。
    异步函数调用完毕之后,还有工作线程执行异步任务、通知主线程、主线程调用回调函数等多个步骤,这个过程叫做异步过程。

  3. 异步过程通常是:

    主线程发起一个异步请求,相应的工作线程接收请求并告知主线程已收到(异步函数返回);主线程可以继续执行后面的代码,同时工作线程执行异步任务;工作线程完成工作后,通知主线程;主线程收到通知后,执行一定的动作(调用回调函数)。

    异步函数的形式:A(args..., callbackFn)

    • 发起函数(或叫注册函数)A
    • 回调函数callbackFn
    • 例如:setTimeout(fn, 1000) fn回调函数
  4. 消息队列和事件循环
    异步过程中,工作线程在异步完成后需要通知主线程,通知机制就是利用消息队列和事件循环。
    工作线程将消息放到消息队列,主线程通过事件循环过程去取消息。
    主线程只会做一件事情:从消息队列中取消息、执行消息、再取消息、再执行/消息队列为空就等在消息队列变成非空。并且只有当前消息执行完成后,主进程才会取下一个消息。这个机制就是事件循环机制。取一次消息并执行的过程就叫一次循环。

    消息队列中消息具体是什么?消息就是注册异步任务时添加的回调函数。 image.png
  5. 异步与事件
    消息队列中每条消息实际上都对应着一个事件。
    例如按钮点击函数button.addEventListener("click", function(e){...})就是异步过程的发起函数,事件监听函数function就是异步过程的回调函数。事件触发时,表示异步任务完成,会将事件监听器函数封装成一条消息放到消息队列中,等待主线程执行。

  6. 同步保证了顺序一致,但容易导致阻塞;异步可以解决阻塞问题,但是会改变顺序性。改变顺序性其实也没什么大不了的,只不过让程序变得稍微难理解了一些。

参考:
Javascript同步、异步与事件循环

相关文章

  • Javascript同步、异步与事件循环

    Javascript是单线程的JS引擎中负责解释和执行JavaScript代码的线程只有一个,主线程处理AJAX请...

  • Javascript异步编程

    同步模式与异步模式 事件循环与消息队列   JavaScript 单线程指的是浏览器中负责解释和执行 JavaSc...

  • 异步编程

    同步与异步 同步:按代码顺序依次执行 异步:先执行同步代码,完成后再执行异步代码 事件循环与消息队列:当代码执行到...

  • js笔记

    Javascript 事件循环: js解析方法时,将同步任务排队到执行栈中,异步任务排队到事件队列中。 事件队列分...

  • JS同步异步与事件循环

    文章序 理解JS的单线程和同步异步逻辑、事件循环(event loop)是学习JavaScript进阶的必经之路,...

  • JavaScript的同步,异步和事件循环

    写篇文章,弄清楚些JavaScript的同步,异步和事件循环这些概念 一.所谓单线程: 是指在js引擎中负责解释和...

  • I/O模型与多路复用

    同步、异步、阻塞、非阻塞 同步 & 异步 同步与异步是针对多个事件(线程/进程)来说的。 如果事件A需要等待事件B...

  • 浅谈JavaScript事件循环与Vue的批量异步更新策略

    在介绍事件循环之前,首先要明确以下几个关键概念。事件循环,同步和异步任务,宏任务,微任务。 一.事件循环 事件循环...

  • JavaScript本来就很简单(运行机制)

    JavaScript同步与异步 在JavaScript中同步与异步是非常重要的两个概念,首先在这儿做一个总体概述,...

  • JavaScript是如何工作的:事件循环和异步编程的崛起 +

    摘要: 深度理解JS事件循环!!! 原文:JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 ...

网友评论

      本文标题:Javascript同步、异步与事件循环

      本文链接:https://www.haomeiwen.com/subject/rvyqvctx.html