美文网首页javascript高级
NodeJs事件驱动和非阻塞机制详解

NodeJs事件驱动和非阻塞机制详解

作者: majunchang | 来源:发表于2017-08-20 09:49 被阅读41次

NodeJs事件驱动和非阻塞机制详解

NodeJs强调错误优先

  • 因为事件的操作大多数都是异步的方式,无法通过try catch捕获异常
  • 采用错误优先的回调函数

NodeJs基本介绍(菜鸟教程)

  1. Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。
  2. Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。
  3. Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。
  4. Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数。

NodeJs事件驱动机制

Nginx的服务原理类似,Node采用事件驱动的运行方式。不过nginx式多进程单线程,而Node通过事件驱动的方式处理请求时无需为每一个请求创建额外的线程。在事件驱动的模型当中,每一个IO工作被添加到事件队列中,线程循环地处理队列上的工作任务,当执行过程中遇到来堵塞(读取文件、查询数据库)时,线程不会停下来等待结果,而是留下一个处理结果的回调函数,转而继续执行队列中的下一个任务。这个传递到队列中的回调函数在堵塞任务运行结束后才被线程调用

前面也说过Node Async IO = CPS + Callback,这一套实现开始于Node开始启动的进程,在这个进程中Node会创建一个循环,每次循环运行就是一个Tick周期,每个Tick周期中会从事件队列查看是否有事件需要处理,如果有就取出事件并执行相关的回调函数。事件队列事件全部执行完毕,node应用就会终止。Node对于堵塞IO的处理在幕后使用线程池来确保工作的执行。Node从池中取得一个线程来执行复杂任务,而不占用主循环线程。这样就防止堵塞IO占用空闲资源。当堵塞任务执行完毕通过添加到事件队列中的回调函数来处理接下来的工作。

mark

自己的描述

  1. Node是一个单线程的语言,采用事件驱动和异步回调的机制。在执行代码的时候,主线程从上往下依次执行,遇到有需要回调的地方,就将此处加入到事件队列中,然后主线程继续往下走,直到运行结束以后,才去执行事件队列中的回调
  2. node去执行事件队列中的事件时,如果遇到回调,依然是按照顺序添加进入事件队列,主线程一次往下执行,遇到回调就添加,直至执行完毕。
  3. node是一个单线程多进程的。node进程创建一个循环,每个循环就是一个周期,在循环中会从事件队列里查看是否有事件需要处理,如果有就去除事件并执行相关的函数。对于阻塞事件的处理在幕后使用线程池来确保工作的运行,而不占用主循环流程。

NodeJs非阻塞机制

( mark

)

相关文章

  • NodeJs事件驱动和非阻塞机制详解

    NodeJs事件驱动和非阻塞机制详解 NodeJs强调错误优先 因为事件的操作大多数都是异步的方式,无法通过try...

  • nodejs是什么

    nodejs是什么 nodejs是js runtime使用事件驱动 和 非阻塞I/O 模型 非阻塞I/O 阻塞:...

  • Node-1

    事件驱动 NodeJs是单线程、非阻塞I/O的事件驱动;不同于Java/PHP/.net等服务器语言,NodeJs...

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

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

  • Node.js初体验

    简介:http://nodejs.cn/ 基于Chrome V8引擎的后端JS运行环境 + 事件驱动,非阻塞IO模...

  • 2 Nodejs02 API

    1、Nodejs基本认知 ->高并发(异步I/O、非阻塞式I/O)、高性能(chrome v8引擎)、事件驱动单线...

  • NodeJS事件循环(Event Loop)

    前言 事件驱动、异步、单线程、非阻塞I/O,这是我们听得最多的关于nodejs的介绍。看到这些关键字,可能我们会好...

  • node 异步 I/O

    这篇文章主要讲 nodejs 中的异步 IO,关于同步、异步、阻塞、非阻塞 请移步这里。 事件循环 和 消息队列 ...

  • 整理一些遇到的问题

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

  • 关于node.js的一个全局,两个伪全局对象

    Nodejs是一种基于ChromeV8引擎构建的一种非阻塞,具有事件驱动I/O的JavaScript运行平台,简单...

网友评论

    本文标题:NodeJs事件驱动和非阻塞机制详解

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