美文网首页我爱编程
node.js 学习笔记 (1)之基础认识

node.js 学习笔记 (1)之基础认识

作者: 不吃早餐a | 来源:发表于2018-04-04 09:04 被阅读0次
一、Node.js的特点
  • 单线程

Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。

另外,单线程的带来的好处,还有操作系统完全不再有线程创建、销毁的时间开销。
坏处,就是一个用户造成了线程的崩溃,整个服务都崩溃了,其他人也崩溃了。

  • 非阻塞I/O non-blocking I/O

JavaScript脚本语言一个特征就是它只支持单线程。但是Node.js中为V8 JavaScript脚本语言提供了非阻塞I/0机制。

程序执行过程中必然要进行很多I/O操作,读写文件、输入输出、请求响应等等。I/O操作时最费时的,至少相对于代码来说,在传统的编程模式中,举个例子,你要读一个文件,整个线程都暂停下来,等待文件读完后继续执行。换言之,I/O操作阻塞了代码的执行,极大地降低了程序的效率。

下图为阻塞IO的工作模式:

阻塞IO在需要获取数据进行IO操作时,CPU会等待,当读取完成后,再继续运行。那么很容易就能想到,如果读取很耗时,CPU就会长期处于阻塞状态,显然效率很低。

阻塞IO.png

再看看非阻塞IO:

非阻塞IO在进行IO操作时,会直接返回。然后CPU该干嘛干嘛,只不过需要一定的策略来确定什么时间请求数据完成,这个时候就需要一些轮训策略了,比如select poll等等。那么这个也应该能想到,当有长期的IO操作,会白白执行大量的查询操作,效率也不高。

非阻塞IO.png
  • 事件驱动 event-driven

在Node中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在Node中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件(比如,又有新用户连接了),然后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制

事件机制.png
二、 Node.js中的模块
模块1.png
模块2.png
三、demo
require('http').createServer(function (req, res) {
  res.writeHead(200,{'Content-Type':'text/plain'});
  res.end('hello world');
}).listen(3000);

console.log('Server listening on http://localhost:3000/');

参考链接
图解NodeJS【基于事件、回调的单线程高性能服务器】原理

相关文章

网友评论

    本文标题:node.js 学习笔记 (1)之基础认识

    本文链接:https://www.haomeiwen.com/subject/vnqncftx.html