Node.js

来源:互联网 发布:陈田村拆车件淘宝店 编辑:程序博客网 时间:2024/04/30 12:39

NodeJs是什么
Nodejs不是一种独立的语言,也不是javascript的框架,更不是浏览器的库,不能与ExtJS相提并论。Node.js是一个让javascript运行在服务端的开发平台。

Nodejs能做什么
Javascript为客户端产生,Nodejs为网络而生。开发具有复杂逻辑的网站,基于社交网络的大Web应用

异步IO事件驱动
Node.js最大的特性就是采用异步I/O与事件驱动的架构设计。对于高并发的解决方案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步式I/O调用时的事件开销。Node.js使用的单线程模型,在执行的过程中会维护一个事件队列,程序执行时在进入事件循环等待下一个事件到来。

浏览器引擎革命
Google Chrome的引擎是V8。Node.js的是引擎引用的就是V8。所以它快,为什么ExtJs在chrome如此的快,正因为如此。

Nodejs最大的特性就是异步式I/O与事件紧密结合的编程模式。这种模式与传统的同步式I/O线程的编程思路有很大的不同,因为控制流很大程度要靠事件和回调函数来组织,一个逻辑要拆分为若干个单元。

同步式I/O或阻塞式I/O
线程在执行中如果遇到磁盘读写或者网络通信,通常要消耗较长事件。这时操作系统会剥夺这个线程的CPU执行权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞,当I/O操作完成时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权令其执行。

异步式I/O或者非阻塞I/O
针对所有I/O操作不采用阻塞策略,当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或者数据的返回,而只是将I/O请求发送给操作系统,继续执行下一条语句,当操作系统完成I/O操作时以事件的形式通知执行I/O操作的线程,线程会在特定时候处理这个事件,为了处理异步I/O,线程必须有事件循环,不断的检查有没有为处理的事件,依次予以处理。

非阻塞和阻塞的区别
非阻塞模式:一个线程永远在执行计算操作,这个线程所使用的CPU核心利用率永远都是100%,I/O以事件的方式通知。
阻塞模式:多线程往往能提高系统吞吐量,因为一个线程阻塞还有其他线程在工作,多线程可以让CPU资源不被阻塞中的线程浪费。

同步式IO 异步式IO
利用多线程提高吞吐量 单线程即可实现搞吞吐量
通过时间片分割和线程调度利用多核CPU 通过功能划分利用多核
需要由操作系统调度多线程使用多核CPU 可以将单线程绑定到单核CPU
难以充分利用CPU资源 可以充分利用CPU资源
内存轨迹大,数据局部性弱 内存轨迹小,数据局部性强
符合线性的编程思维 不符合传统编程思维

Nodejs的事件循环机制
nodejs在什么时候进入事件循环呢?
nodejs程序式由事件循环开始,到事件循环结束,所有的逻辑都是事件的回调函数。
如何使用自定义的事件呢?
事件的回调函数在执行的过程中,可能会发出IO请求或者直接发射事件,执行完毕后再返回事件循环。

0 0
原创粉丝点击