美文网首页程序员技术干货
nodejs单线程异步和事件轮询

nodejs单线程异步和事件轮询

作者: 老邵 | 来源:发表于2018-03-23 22:20 被阅读54次

首先解释一下单线程这个概念,顾名思义就是在一条线上运行。也就是说引擎对于 js 文件从头到尾依次执行,通常所说的同步就是这个意思。那么,异步是什么意思?
要解释异步首先看一下下方的代码:

request.get("www.xxx.com:8080/articles",function() {})

在这段代码中,有一个匿名 function,这个函数被称为回调函数。在解析 js 时这个函数是不会被立即执行的,只有对服务器的请求完成后这个函数才会被执行。既然这个函数不会被立即执行,那么这个函数及其所在的一段代码就是异步的。单线程异步简单来说就是这种机制。

js 是单线程的,但引擎不是,在引擎中有一个线程叫做「事件触发线程」。这个线程是配合引擎的 js 线程实现 js 异步的。当引擎执行 js 遇到异步的方法时,会将回调函数交给事件触发线程。以上方的代码为例,回调函数交给事件触发程序后,当对服务器的请求完成,事件触发程序会将回调函数添加到它所管理的事件队列中。

这个事件队列会一直等到同步的 js 执行完,添加到执行栈中接着执行。由于事件被触发的条件不同,事件队列会不断更新。js 线程中执行栈为空后就会一直查询事件队列,如果有新被触发的事件就添加到执行栈中执行。这个机制称为事件轮询。

相关文章

  • nodejs单线程异步和事件轮询

    首先解释一下单线程这个概念,顾名思义就是在一条线上运行。也就是说引擎对于 js 文件从头到尾依次执行,通常所说的同...

  • 回调函数

    浏览器的事件轮询 首先js是单线程的,js异步是浏览器事件轮询的结果。事件轮询的字面意思就是事件循环。事件轮询的步...

  • 16.3 JavaScript的执行机制

    浏览器事件轮询机制 js执行为单线程 网络请求、setTimeout、addEventListener属于异步事件...

  • Nodejs事件轮询详解

    什么是事件轮询 大家都知道, JavaScript是单线程的, 那么nodejs是如何做到非阻塞呢,在nodejs...

  • js event loop、promise、async/awai

    event loop 事件循环/事件轮询 首先,js是单线程运行的,异步要基于回调来实现。event loop就是...

  • JavaScript 异步编程的几个方法

    原文地址基于浏览器事件轮回机制(以及nodejs中的事件轮询机制),JavaScript常常会运行在异步环境中。而...

  • 解决nodejs异步问题

    nodejs 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高nodejs的每一个api都是异步...

  • 整理一些遇到的问题

    常见的IO模型 单线程阻塞 多线程阻塞 多进程阻塞 非阻塞轮询 事件驱动IO 信号驱动式IO 异步IO(指的是使用...

  • NodeJS为什么支持高并发、非阻塞

    nodejs是非阻塞异步操作。 特点 1、Chrome V8引擎 2、事件驱动 3、非阻塞 I/O 4、单线程 如...

  • 单线程/异步/事件轮询(event-loop)

    1.单线程 只有一个线程,同一时间只能做一个事情,JS代码需要一行行执行,不是多行执行 --------单线程 只...

网友评论

    本文标题:nodejs单线程异步和事件轮询

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