Nodejs有几个特性:异步IO,事件驱动,单线程,跨平台javascript
异步IO能够保证在CPU计算的同时,异步的加载IO,加快了应用的访问。不像传统的服务器是使用什么阻塞IO啊、轮训IO等等,它至关于在发送处理请求时,直接传一个回调函数,当异步的IO结束后,会自动的执行回调。java
事件驱动,则是把粒度下降到事件级别。传统的服务器是一个请求分配一个线程进行处理,这样就会增长多线程通讯的复杂性。而事件驱动,则简化了事件模型。node
单线程其实主要是由于Nodejs是基于V8浏览器引擎,所以具备单线程的特色,并且内存很小。这样就引出了Node的劣势——没法利用多核CPU、若是应用出现问题整个系统也会崩溃、CPU繁忙将会影响IO。(所以Node中也提供了child_process模块建立子进程,以此来利用多核;引入了一些集群特性,增长健壮性)。浏览器
最后就是跨平台,Nodejs其实并不是所有用javascript编写,只是表面的业务语言以及开放的模块才使用js。底层的大部分的模块仍是使用C++构建,所以经过切换系统级别的组件,能够直接切换平台。服务器
单线程的弱点多线程
一、没法利用多核cpu异步
二、错误会引发整个应用的退出,应用的健壮性值得考验函数
三、大量计算占用cup致使没法继续调用异步的I/O;线程
node的擅长 I/O密集型的业务(绝大多数时间在计算上)进程
(cpu密集型业务指 等待I/O上花费了大可能是时间 )