Node.js

什么是Node.js

  • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境;
  • Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效;
  • Node.js可以让JavaScript运行在服务端上,它让JavaScript伸到了服务端,可以跟PHP,JSP,Python,Ruby等语言平等.
  • Node的不同之处:
    • PHP,Python,Ruby等是独立语言,而Node.js用JavaScript,运行在V8上;
    • LAMP的差异(Linux + Apache(Nginx) + Mysql + PHP(Python));
    • 高性能.
1. Node.js的特点:
  1. 单线程:

在传统的服务端语言中,用户请求一个服务器就会被分配到一个可用的线程中,而每创建一个线程是需要消耗2M的内存,如果要让程序支持更多的用户,则加重了服务器成本(8G内存的服务器,理论上能容纳4000左右的并发量.
Node.js不是用多个线程为每个请求执行工作的,相反而是它把所有工作添加到一个事件队列中,然后有一个单独线程,来循环提取队列中的事件。事件循环线程抓取事件队列中最上面的条目,执行它,然后抓取下一个条目。当执行长期运行或有阻塞I/O的代码时,注意这里:它不会被阻塞,会继续提取下一个事件,而对于被阻塞的事件Node.js会从线程池中取出一个线程来运行这个被阻塞的代码,同时把当前事件本身和它的回调事件一同添加到事件队列。

  1. 非阻塞式I/O
  • 阻塞式I/O:程序执行过程中必然要进行很多I/O操作,读写文件、输入输出、请求响应等等。I/O操作时最费时的,至少相对于代码来说,在传统的编程模式中,举个例子,你要读一个文件,整个线程都暂停下来,等待文件读完后继续执行。换言之,I/O操作阻塞了代码的执行,极大地降低了程序的效率。
  • 非阻塞I/O:Node.js采用非阻塞型I/O机制,非阻塞I/O是程序执行过程中,I/O操作不会阻塞程序的执行,也就是在I/O操作的同时,继续执行其他代码(这得益于Node的事件循环机制)。在I/O设备效率还远远低于CPU效率的时代,这种I/O模型(非阻塞I/O)为程序带来的性能上的提高是非常可观的。
  1. 事件驱动

Node通过事件驱动的方式处理请求时无需为每一个请求创建额外的线程。在事件驱动的模型当中,每一个I/O工作被添加到事件队列中,线程循环地处理队列上的工作任务,当执行过程中遇到来堵塞(读取文件、查询数据库)时,线程不会停下来等待结果,而是留下一个处理结果的回调函数,转而继续执行队列中的下一个任务。这个传递到队列中的回调函数在堵塞任务运行结束后才被线程调用。
V8引擎是一个非阻塞事件驱动IO框架, Node基于V8强力驱动,两这个的底层代码近半都是用于事件列队

事件驱动模型

你可能感兴趣的:(Node.js)