nodejs是什么?为何要学?有什么优缺点?

近期在看一些Node.js的知识,别人的一些博客、文档等,看完后以为,一些前面的东西忘记了,因而整理一下,方便本身查阅,也但愿对学习Node.js的朋友有些帮助;javascript

固然如下只是我我的的观点和理解,不喜勿喷,也望大神指教php

1、Node.js是什么java

关于这个问题,刚看到它的时候,可能以为和javascript有关系,没错,确实有关系;可是,首先Node.js不是一门语言,与php python perl ruby的node

“既是语言又是平台”不一样;Node.js也不是一个javascript框架或者javascript类库,不一样于Jquery ExtJS;Node.js是一个可让javascript运行在python

服务器端的平台;web

官网:https://nodejs.org/en/ruby


2、Node.js特色服务器

Node.js具备如下特色:多线程

①是一个javascript运行环境或者平台并发

②依赖于Chrome V8引擎进行代码解释

③基于事件驱动

④异步式I/O(非阻塞I/O)

⑤单进程、单线程

⑥轻量、可伸缩,适用于实时数据交互应用

经过以上的特色,咱们能够总结一句话:

Node.js是用异步式I/O和事件驱动,依赖于Chrome的V8引擎进行代码解释的javascript运行环境;

Node.js最大的特色就是异步式I/O和事件驱动,对于高并发的解决方法,Node.js摒弃了传统的多线程模型,

使用的是单线程模型,对全部的I/O请求都采用异步式请求的方式;

 

这里简单介绍下,异步式I/O和事件驱动:

异步式I/O,又叫非阻塞I/O,

在阻塞状态下,当线程遇到I/O操做时,会等待I/O操做的完成,从而形成阻塞,而一个线程只能处理一项任务,要想提供吞吐量必须经过多线程;

而非阻塞状态下,不会等待I/O操做的结果返回,继续执行下一条语句,当结果返回时,I/O以事件的方式通知;

 

Node.js的异步式I/O由回调函数完成,事件的回调函数在遇到I/O请求而且当I/O操做完成时,会发送一个事件

到事件队列,而Node.js的事件循环机制会检查队列中有没有未处理的事件,直到程序结束,因此能够说,

Node.js程序由事件循环开始,到事件循环结束。


3、Node.js的用途

Node.js适合应用在高并发、I/O密集、少许业务逻辑的场景

善于I/O,不善于计算。由于Node.js最擅长的就是任务调度,若是你的业务有不少的CPU计算,实际上也至关于这个计算阻塞了这个单线程,就不适合Node开发。

当应用程序须要处理大量并发的I/O,而在向客户端发出响应以前,应用程序内部并不须要进行很是复杂的处理的时候,Node.js很是适合。Node.js也很是适合与web socket配合,开发长链接的实时交互应用程序。

好比:

● 用户表单收集

● 考试系统

● 聊天室

● 图文直播

● 提供JSON的API(为前台Angular使用)


不适合的场景:

1.计算密集型应用

2.单用户多任务的程序

3.逻辑十分复杂的事务

4.unicode与国际化