美文网首页
同步/异步的理解

同步/异步的理解

作者: 以手画圆心 | 来源:发表于2017-12-02 14:22 被阅读9次

1.什么是异步

解释这个问题的时候,需要跟同步进行对比理解。同步会阻塞代码执行,而异步不会阻塞。

1.1alert是同步

console.log(100);
alert(200);
console.log(300);

执行这三句代码的时候:
第一句直接执行,打印出100;
第二句是alert,执行的时候,窗口弹出200,这个时候,如果你不点击确认,那么后面的代码就无法继续执行,也就不会打印出300,只有在你点击确认之后,第三句才会执行。
所以说,alert会阻塞代码,所以alert是同步。

1.2setTimeout是异步

console.log(100);
setTimeout(function(){
     console.log(200);
});
console.log(300);

执行第一行,打印100;
执行setTimeout后,传入setTimeout的函数会被暂存起来,不会立即执行(单线程的特点,不会同时干两件事);
执行最后一行,打印300;
等所有程序执行完,处于空闲的时候,会立马查看有没有暂存起来要执行的;
发现暂存起来的setTimeout中的函数,无需等待时间,就立即过来执行。
(打印顺序:100 300 200)

以上解释过程,可以看出,setTimeout是异步,并不会阻塞程序进行,同时也解释了异步与单线程:

因为js是一个单线程语言,所以需要异步。

2.异步适合的场景(什么时候需要异步?)

在可能发生等待的情况,等待过程不能像alert一样阻塞程序运行,因此,所有的“等待情况”都需要异步。
(1)定时任务:setTimeout、setInterval;
参照上述setTimeout例子
(2)网络请求: ajax请求,动态 <img>加载;

console.log(start);
$.get('./data.json',function(data){
    console.log(data);
})
console.log(end)

执行第一行打印start;
执行第二行,发送请求之后,等待请求回应,执行函数暂存起来;
执行第三行打印end;
所有程序执行完毕,空闲的时候,发现暂存函数,但此时是封禁的,因为请求还没回来;
请求回来之后,函数解禁,执行打印data。

(3)事件绑定。(可以执行多次)

console.log(start);
document.getElementById('btn').addEventListener('click',function(){
    console.log(clicked);
})
console.log(end);

执行第一行代码,打印start;
执行第二行代码,是一个btn绑定点击事件,执行函数会暂存起来;
执行最后一行代码,打印end;
当点击btn的时候,暂存起来的执行函数解禁,打印出clicked;

3.一个关于setTimeout的例子

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

打印顺序:1 3 5 2 4

相关文章

  • Java AIO基础

    Java AIO(异步IO)特性是在Java7引入的。 [TOC] 同步异步、阻塞非阻塞的理解 同步和异步 同步和...

  • 简单理解异步,非阻塞和 IO 复用

    1.1 同步与异步 同步与异步的理解 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式。同步: 当一个...

  • 同步/异步的理解

    1.什么是异步 解释这个问题的时候,需要跟同步进行对比理解。同步会阻塞代码执行,而异步不会阻塞。 1.1alert...

  • JS 函数的执行时机

    1.同步和异步的区别 我们都知道JS里面有同步和异步的区别,怎么理解同步和异步呢。一家餐厅吧来了5个客人,同步的意...

  • (2018-05-30.Python从Zero到One)8、(T

    7 异步与WebSockets 知识点 理解同步与异步执行过程 理解异步代码的回调写法与yield写法 Torna...

  • 网络编程基本概念

    网络编程有一些基本概念需要理解掌握,比如同步、异步、阻塞非阻塞。 1. 同步vs异步 同步与异步主要是从消息通知机...

  • 同步和异步的理解

    但是js又分为同步和异步,那这里的异步和同步我们应该如何理解呢其实同步和异步,无论如何,做事情的时候都是只有一条流...

  • Javascript进阶——异步编程原理

    理解JS异步 同步和异步 同步:调用之后得到结果,再依次执行其他的任务 异步:调用之后可以不等待结果,继续做其他的...

  • iOS - 多线程

    CGD: 理解下同步和异步: 1、同步 - 主线程执行 输出结果: 2、异步 - 主线程执行 输出结果: 3、串行...

  • 同步异步阻塞非阻塞

    同步异步的理解: 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式。 同步: 当一个同步调用发出去后,...

网友评论

      本文标题:同步/异步的理解

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