首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS同步任务任务任务

概念 在JS运行机制当中,JavaScript是单线程的编程语言,简单的讲就是将JavaScript比作一个单项的管道,每次仅仅执行一个任务,执行多种任务需要进行排队执行。...待执行任务种类 在JavaScript待执行任务,主要分为两类 同步任务 异步任务 同步任务 所谓同步任务,就是非耗时任务,在主线程当中直接执行的任务 例如 console.log('同步任务');...等等都属于同步任务,同步任务,直接在JS单线程当中执行 异步任务 异步任务,又称耗时任务,异步任务的执行浪费时间,容易造成线程的堵塞。 异步任务又分为微任务与宏任务。...//异步任务 }) 宏任务任务主要包括定时器、I/O等等 /* setTimeout setInterval I/O */ 执行优先级 在JS当中,其待执行任务的优先级为同步任务>微任务>宏任务...运行从上至下,首先打印的是同步代码块的script start,之后,settimeout定时器是属于宏任务,则将其扔到宏任务队列里等待执行。

21740

JS的同步异步编程,宏任务与微任务的执行顺序

浏览器是多线程的,JS是单线程的(浏览器只分配一个线程来执行JS)   进程大线程小:一个进程包含多个线程,例如在浏览器打开一个HTML页面就占用了一个进程,加载页面的时候,浏览器分配一个线程去计算...DOM树,分配其它的线程去加载对应的资源文件...再分配一个线程去自上而下执行JS   同步:在一个线程上(主栈/主任务队列)同一个时间只能做一件事情,当前事情完成才能进行下一个事情(先把一个任务进栈执行...异步:在主栈执行一个任务,但是发现这个任务是一个异步的操作,我们会把它移除主栈,放到等待任务队列(此时浏览器会分配其它线程监听异步任务是否到达指定的执行时间),如果主栈执行完成,监听者会把到达时间的异步任务重新放到主栈执行...执行顺序优先级:SYNC => MICRO => MACRO 所有JS的异步编程仅仅是根据某些机制来管控任务的执行顺序,不存在同时执行两个任务这一说法 先来看一个例子: setTimeout(()...我们用ajax来看看js的同步与异步的执行顺序和机制,AJAX任务开始:SEND,AJAX任务结束:状态为4 let xhr = new XMLHttpRequest(); xhr.open('GET'

2K10
您找到你想要的搜索结果了吗?
是的
没有找到

JS的进程、线程、任务队列、事件循环、宏任务、微任务、执行栈等概念理解

JS的进程、线程、任务队列、事件循环、宏任务、微任务、执行栈等概念理解 javascript中有很多需要知道的概念,尤其是标题中列出来的这些,今天就来过一下这些概念。...一、进程和线程 浏览器的每一个tab页可以看做是浏览器内核进程,每个进程下面会有多个线程来互相配合完成任务 比如 GUI线程、JS引擎线程、网络线程、定时器线程等 二、任务队列 任务队列可以当做是一个个的对调任务...,当主线程的任务完成后,就开始执行任务队列任务(如果当前任务队列再添加了新的异步任务,则其回调函数会放在之后的任务队列) 三、事件循环 异步任务执行后,其回调会放到任务队列。...当引擎第一次遇到js代码时,会产生一个全局执行上下文压入执行栈,每遇到一个函数调用,就往栈压入一个新的上下文。引擎执行栈顶的函数后则弹出当前执行上下文直至函数依次执行完毕并回到全局的上下文。...之后先从微任务捞取任务执行 console.log(3)并把后面的setTimeout放到下一个宏任务队列(第二个)。然后从当前宏任务队列捞取要执行的代码,打印1。

1.1K00

JS 事件循环、微任务和宏任务

JS 的异步任务分为宏任务 (macro task) 和微任务 (micro task) ,只有宏任务会进行事件循环。 事件循环 JS 是单线程执行的,所有 JS 代码都要放在主线程运行。...循环过程: 拿到一段代码并执行 将代码的同步任务交给主线程,形成执行栈 将代码的异步(宏)任务交给异步处理线程 将异步处理的事件回调推入任务队列 当执行栈的同步任务执行完成后,调用任务队列的异步回调...监听对象的变化,已废弃) 宏任务,依赖浏览器等宿主环境; 微任务,在 JS 引擎执行,不会造成阻塞,也不参与事件循环。...微任务的执行时机 JS 在执行一段代码的时候,除了会把同步任务放入执行栈,还会把微任务放到执行栈后面,形成一个微任务队列( JS 可访问 queueMicroTask)。...在执行栈的同步任务执行完成后,JS 会先调用微任务队列任务,然后再去调用宏任务队列。

1.3K20

js 同步异步,宏任务和微任务

异步任务 不会进入主线程,所有的异步任务都会进入"任务队列"里,只有所有的同步任务执行完毕后,"任务队列"里的异步任务开始进入主线程执行栈执行;最基础的异步是setTimeout和setInterval...宏任务: setTimeout setInterval Ajax DOM事件 I/O script标签的整体代码 微任务: new Promise() new MutaionObserver()...事件循环机制(event loop) js引擎会从上到下逐行进行解析; 将其中的同步任务按照执行顺序排列到执行栈,所有的异步任务会放到"任务队列"; 在所有的同步任务执行结束后,在确保没有同步任务的时候...,然后检查"任务队列"是否有任务,如果有,就将第一个事件对应的回调,推到执行栈执行; ==注意:==异步任务分宏任务和微任务两种类型,微任务比宏任务的执行时间要早,所以会优先把所有的微任务放到执行栈执行...所以从上面的代码例子可以得出: 先把同步任务执行,得到 1,5, 然后依次执行微任务(Promise),得到 2, 4,最后执行宏任务(setTimeout),得到3, 7。

1.3K40

C语言表驱动法在定时任务列表的应用

在嵌入式软件开发,如果存在硬件定时器不足以支撑软件运行的时候,软件定时器的实现就显得十分有必要了。函数指针可以用于定时任务列表的创建和使用。在这种情况下,对系统的输入是时间的流逝。...然后定义一个timer_task类型的结构体数组timer_handler_task,并使用将要调用的函数列表及其调用间隔对其进行初始化。...在main函数,我们有启动代码,它必须启用一个周期性的计时器中断,该中断以固定的间隔增加易失性变量tick。然后我们进入无限循环。...然后代码简单地遍历每个任务,查看是否已经执行到该任务的时间,如果是,则通过函数指针调用它。 如果你的项目仅包含两个或三个任务,那么应用这个方法就有点大材小用了。...但是,如果你的项目有大量定时任务,或者将来可能需要添加其它的任务,那么这种方法是非常不错的。

1.1K30

JS事件循环之宏任务和微任务

众所周知,JS 是一门单线程语言,可是浏览器又能很好的处理异步请求,那么到底是为什么呢? JS 的执行环境一般是浏览器和 Node.js,两者稍有不同,这里只讨论浏览器环境下的情况。...JS 执行过程中会产生两种任务,分别是:同步任务和异步任务。 同步任务:比如声明语句、for、赋值等,读取后依据从上到下从左到右,立即执行。...#任务队列(Event Queue) 任务队列任务也分为两种,分别是:宏任务(Macro-take)和微任务(Micro-take) 宏任务主要包括:scrip(JS 整体代码)、setTimeout...:先执行一个宏任务,执行过程如果产出新的宏/微任务,就将他们推入相应的任务队列,之后在执行一队微任务,之后再执行宏任务,如此循环。...setTimeout() 的第二个参数是为了告诉 JavaScript 再过多长时间把当前任务添加到队列

1.1K10

Vue.js-列表渲染 原

我们用v-for指令根据一组数组的选项列表进行渲染,v-for指令需要以item in items形式的特殊语法,items是源数据数组并且item是数组元素迭代的别名 基本用法 <body class..." }, { message: "bar" } ] } }) 在v-for块,...,按回车下面的列表增加一项,原理是在input写上v-model的属性,用于与data里面的newTodoText双向绑定,同时v-on:keyup.enter 是按enter键后执行addNewTodo...方法,实例的方法是在todos新增一项,并且把input清空     //2、父模板数据不能直接传递到子组件模板,需要在子组件定义props属性像props:["title"],父模板绑定title...并赋值,因为例子的li含有按钮,点击按钮抛出子组件remove,父组件接收remove并执行todos.splice(index,1)意思是从下标index开始删除1项 v-for与v-if v-for

2.8K20

python列表

3.使用列表的各个值可像使用其他变量一样使用列表的各个值。例如,你可以使用拼接根据列表的值来创建消息。...例如,你创建一个游戏,要求玩家射杀从天而降的外星人;为此,可在开始时将一些外星人存储在列表,然后每当有外星人被射杀时,都将其从列表删除,而每次有新的外星人出现在屏幕上时,都将其添加到列表。...2.在列表添加元素 你可能出于众多原因要在列表添加新元素,例如,你可能希望游戏中出现新的外星人、添加可视化数据或给王振添加新注册的用户。python提供了多种在既有列表添加新数据的方式。...例如,你可能需要获取刚被射杀的外星人的x和y坐标,以以便在相应的位置显示爆炸效果;在Web应用程序,你可能要将用户从活跃成员列表删除,并将其加入到非活跃成员列表。...最后,值'ducati'已经从列表删除,但它还存储在变量too_expensive,让我们能够打印一条消息,指出将'dacati'从列表motorcycles删除的原因:: ['honda', '

5.5K30
领券