Node.js初识

V8引擎本身就是用于Chrome浏览器的JS解释部分。
Node.js是一个让JavaScript运行在服务器端的开发平台,它让JAVAScript的触角伸到了服务端,可以与PHP,JSP,Python,Ruby平起平坐。
Node不同的是:
1.Node.js不是一种独立的语言,与PHP,JSP,Python,Perl.Ruby的“既是语言,也是平台”不同,Node.js使用JavaScript进行编程,运行在JavaScript引擎上(V8)。
2.与PHP,JSP等相比(PHP,JSP,.net等都需要运行在服务器程序上,Apache,Naginx,Tomcat)

Node的实现:
Node内部采用Google Chrome的V8引擎,作为JavaScript语言解释器,通过自行开发的libuv,调用操作系统资源。
这里写图片描述
以下是关于libuv的简要介绍,如果有兴趣的同学可以自己去查阅有关资料。
libuv 采用了 异步 (asynchronous), 事件驱动 (event-driven)的编程风格, 其主要任务是为开人员提供了一套事件循环和基于I/O(或其他活动)通知的回调函数, libuv 提供了一套核心的工具集, 例如定时器, 非阻塞网络编程的支持, 异步访问文件系统, 子进程以及其他功能。

Node.js的特点:

1.单线程

在Java,Php或者.net服务端语言中,会为每一个客户端创建一个新的线程。而每一个线程需要耗费大约2MB内存。这也就意味着,一个内存有限的服务器其可以同时连接的用户就是受到了相当大的限制 。要让web应用程序支持更多的用户,就要增加服务器的数量,而web应用程序的硬件成本当然也随之上升。
Node.js不是为每一个用户创建一个新的线程,而是仅仅使用一个线程。当有用户连接了,就出发一个内部的事件,通过非阻塞I/O,事件驱动机制。Node.js程序宏观上是并行的。
此外,单线程还具备的优点是:操作系统完全不再有线程创建,销毁事件开销。
其缺点在于:一个用户zaocnode.js一个线程崩溃,服务就崩溃了

2.非阻塞I/O

举例说明什么是阻塞:
例如:当在访问数据库取得数据的时候,需要一段时间。在传统的单线程处理机制中,在执行访问数据库的代码之后,整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,极大地降低了程序执行效率。
而Node.js中采用了非阻塞型I/O机制,因此在执行了访问数据库的代码之后,立即转而区执行后面的代码,把数据库返回的结果的处理代码放在回调函数中,从而提高了程序的执行效率。
当I/O执完毕,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数。为了处理异步I/O,线程必须有事件循环,不断检查有没有未处理的事件,依次予以处理。
例如:

fs.readFile('1.txt',function(){

})
a++;

如上图所示的代码,当执行到读文件操作的代码时,不是文件读取,而是转去执行下面的代码a++;当文件读取完毕之后,以事件的形式通知线程去执行回调函数,再进行相关操作。
在非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100%。

3.事件驱动

在Node中,客户端请求建立连接,提交数据等行为,会触发相应的事件,在Node中,在一个时刻只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件(比如:有新用户连接了),然后返回执行原事件的回调函数,这种机制被称为事件处理机制。
Node.js所有的I/O都是异步的,回调套回调。

Node适合开发的项目类型

node.js最擅长的就是调度任务,如果设计大量的CPU计算,会大量消耗时间,node.js就不太适合。
当应用程序需要处理大量并发的I/O,而在向服务器端发出响应之前,应用程序内部并不需要进行非常复杂的处理。
Node.js也非常适合与web Socket配合,开发长连接的交互程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值