js中异步和同步

js引擎

js引擎是浏览器的重要组成部分,重要用于读取js和执行js代码。

js引擎执行js时是单线程执行的。

js执行为什么是单线程?

试想一下:如果js是多线程执行的,假设现在有两个线程p1,p1,那么这两个线程可以同时对同一个dom元素进行操作

比喻说,p1对dom元素进行更新操作,p2对dom元素进行删除操作,这样就会引起混乱。

既然是单线程执行,就说明js代码是从上往下一行一行解析执行的,只有上一行代码执行完毕了才会执行下一行代码。如果上一行代码解析时间很长,那么下一行代码就会被阻塞,对于用于而言,阻塞就以为这卡死,用户体验度很差。那么这个就是同步的特点。

例如:

1:

2:

注意:这就是同步执行的效果,也就是说只有等到前面的代码执行完了,我才能接着往下志执行的。

异步:

输出结果:

注意:异步就是你做你的事情,我的事情,互不影响。

setTimeout setInterval 都是异步任务。


原文地址:http://blog.51cto.com/11871779/2125824

时间: 2024-10-05 05:10:27

js中异步和同步的相关文章

互联网我来了 -- 2. js中"异步/阻塞"等概念的简析

一.什么是"异步非阻塞式"? 这个名字听起来很恶心难懂,但如果以 买内裤 这件事情来比喻执行程序的话就很容易理解"异步非阻塞式"的涵义了. 例如你是一个CPU的线程,你需要去执行一段 买内裤的程序, 你所需执行的步骤大致如下, 到一个商店里问老板, 你们店里还有没有nb牌内裤? 买到内裤,穿上 去小卖店买点火腿回家喂狗 这时候,你作为一个线程,你可能会遇到几种状况或选择. 店里面没货了,老板一直不答应你(阻塞你),你也一直等着(同步),第三天有货了才告诉你有了,你赶

Web worker 与JS中异步编程的对比

0.从一道题说起 var t = true; setTimeout(function(){ t = false; }, 1000); while(t){ } alert('end'); 问,以上代码何时alert"end"呢? 测试一下:答案是:永远都不会alert. 解析:JavaScript引擎是单线程的,事件触发排队等候.所有任务按照触发时间先后排队处理. 上例中,排队的顺序状态是: | var t=true ; | while(t){}; | alert('end'); | 在

JS中异步和单线程

JS 在客户端运行的时候,只有一个线程可运行,因此想要两件事儿同时干是不可能的.如果没有异步,我们只能同步干,等待过程中卡住了,但是有了异步就没有问题了.那么单线程是如何实现异步的呢? console.log(100) setTimeout(function () { console.log(200) }) console.log(300) 那上面的示例来说,有以下几点.重点从这个过程中体会单线程这个概念,即事情都是一步一步做的,不能两件事儿一起做. 执行第一行,打印100 执行setTimeo

Review——JS的异步与同步

一.概念 同步(synchronous):指在js的主线程上,所有任务被依次执行: 异步(asynchronous):指任务不进入主线程,进入任务队列(task):当“任务队列”通知主线程,异步任务才进入主线程执行. 二.异步的机制 同步任务都在主线程上执行,形成一个“任务栈”: 异步任务在“任务队列”中放置一个事件: 主线程的“任务栈”执行完毕后,“任务队列”里的任务被唤醒,从而进入主线程执行: 主线程不断重复上面三步. 任务队列里的事件主要指IO设备或用户行为触发的事件. 三.异步函数 se

JS中ajax实现同步 截取地址栏值

$('选择器').css("display", "block");---- 这是添加样式  所有css样式都可以  我这是只是一个简单的显示样式 $("选择器").find("div").remove();  -----首先获得父元素 然后这里的删除掉他下面的所有div 这里也可以换成别的标签 $("选择器").html('');  ---这是清空它里面的内容,不删除标签,不同于上面 para.inputn

js方法异步改同步解决

如下面代码,想要它按照调用执行顺序来输出1,2 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X

【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制

转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93%E4%B8%8ENode-js%E7%9A%84%E5%BC%82%E6%AD%A5IO%E6%9C%BA%E5%88%B6/ 译者:xidui原文: http://sahandsaba.com/understanding-asyncio-node-js-python-3-4.html 译者前言 如

promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解

* promise承诺 * 解决js中异步编程的问题 * * 异步-同步 * 阻塞-无阻塞 * * 同步和异步的区别? 异步;同步 指的是被请求者 解析:被请求者(该事情的处理者)在处理完事情的时候的通知机制. 异步:当事情处理完成后被请求者会发信息通知请求者该事情处理完成.在这期间被请求者可以选择是继续等待命令请求完成还是去做其他事等待被请求者返回. 同步:当事情处理完成后被请求者不会告知请求者,等到请求者发来询问是才会告知 阻塞:非阻塞 指的是请求者 阻塞:针对请求者来说的,委托其他人处理一

Node.js的异步I/O

Linux操作系统的I/O模型 JAVA的NIO引入了异步I/O,而Node.js宣称的就是异步编程,I/O自然是异步的.其实操作系统在很早就引入了异步I/O的概念,如下图(摘自Unix网络编程中的图片): 我对上图的理解有几点: 从IO设备读取数据到用户内存的整个过程都是由系统内核来完成: 数据总是先被拷贝到内核缓冲区,再由内核缓冲区拷贝到用户内存: 除了异步I/O,其余4种I/O模型其实都是阻塞的,至少在数据从内核拷贝到用户内存时是阻塞的: 虽然异步I/O看上去是理想解决方案,但实现上现在用