引子 几乎在每一本js相关的书籍中,都会说js是单线程的,JS是通过事件队列(Event Loop)的方式来实现异步回调的。 对很多初学JS的人来说,根本搞不清楚单线程的JS为什么拥有异步的能力,所以,我试图从进程、线程的角度来解释这个问题。 CPU 说到CPU和进程、线程,对计算机操作系统有过学习 ...
分类:
编程语言 时间:
2020-12-15 12:53:08
阅读次数:
5
本文着重讲解通过事件循环机制来实现多个异步操作的有序执行、并发执行;通过事件队列实现同级多个并发操作的先后执行顺序,通过微任务和宏任务的概念来讲解不同阶段任务执行的先后顺序,最后通过将浏览器和node下的事件循环机制进行对比,对比其事件循环机制的不同之处,以及在node端通过libuv引擎来实现多个异步任务的并发执行。
分类:
其他好文 时间:
2020-12-14 13:07:36
阅读次数:
3
本文根据Javascript规范入手,阐述了JS执行过程在考虑时效性和效率权衡中的演变,并通过从JS代码运行的基础机制事件队列入手,分析了JS不同任务类型(宏任务、微任务)的差别,通过这些差别给出了详细分析不同任务嵌套的复杂JS代码执行的分析流程。
分类:
其他好文 时间:
2020-11-02 09:50:34
阅读次数:
18
//主线程直接执行 console.log('1'); //丢到宏事件队列中 setTimeout(function() { console.log('2'); process.nextTick(function() { console.log('3'); }) new Promise(functi ...
分类:
其他好文 时间:
2020-06-11 20:07:47
阅读次数:
69
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。 Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.readStream 对象会在文件被打开的时候触发一个事件。 所有这些产生事件的对象都是 event ...
分类:
Web程序 时间:
2020-06-10 19:30:16
阅读次数:
68
写input处理用户输入的时候,想添加一个字段不能为空的功能。如果为空则在input的blur(失去焦点)事件发生时,调用focus把焦点拉回来。但是在谷歌上试了很多次都没有效果。后来看到有的博客说focus要写在settimeout中,自己尝试后发现此方法有效。大概的原因肯定跟事件队列有关,但是才 ...
分类:
Web程序 时间:
2020-05-18 16:54:24
阅读次数:
68
[TOC] nodejs EventEmitter nodejs 所有的异步I/O操作,在完成的时候,都会发送一个事件,到事件队列当中。 nodejs 里面的很多对象,都会分发事件: 一个 net.Server对象,会在每次有新连接的时候,就触发一个事件, 一个 fs.readStream对象,会在 ...
分类:
Web程序 时间:
2020-05-09 23:37:35
阅读次数:
91
原文: https://www.cnblogs.com/Philip Tell Truth/p/6295186.html GUI操作顺序问题引发异常 有时候我们使用写GUI程序的时候会遇到这样的问题:比如在程序中,建立了一个列表的GUI。这个列表是随着时间不断更新的,而且操作也会读取这个列表GUI的 ...
分类:
其他好文 时间:
2020-03-21 09:18:39
阅读次数:
77
1.js的执行是单线程的。 2.而当它遇到了window的setTimeout和setInterval这样的异步任务,js都默默地先不执行这些回调,而是继续向下执行其他js脚本,等到所有js脚本都解析执行完了,再执行回调。 3.那么有多个回调的时候执行顺序是怎么样的呢? 浏览器是多线程的,js执行线 ...
分类:
Web程序 时间:
2020-03-18 21:48:17
阅读次数:
96
1,事件队列(异步和同步,异步的宏任务和微任务)由于JavaScript底层的单线程,异步是必然。异步是主线程对一些特殊任务的处理方式,比如settimeout、Promise。事件队列,英文event loop是专门处理特殊任务的。异步又分宏任务和微任务,前者比如settimeout后者比如Pro ...
分类:
编程语言 时间:
2020-03-08 14:22:24
阅读次数:
73