NodeJS 极简教程 <1> NodeJS 特点 & 使用场景

NodeJS 极简教程 <1> NodeJS 特点 & 使用场景

1. NodeJS是什么
1.1 Node.js is a JavaScript runtime build on Chrome's V8.
Node.js并不是一门语言,JavaScript才是。Node.js是一个runtime,运行在Chrome的V8引擎上,且Node.js并不能使用JavaScript的全集,它不能使用DOM,BOM等浏览器API。
1.2 Node.js uses an event-driven, non-blocking I/O model.
事件驱动,非阻塞I/O
2. 非阻塞I/O
- 阻塞I/O:I/O时进程休眠等待I/O完成之后再进行下一步。
- 非阻塞I/O:I/O时函数立即返回,进程不等待I/O结果。
3. 事件驱动
- I/O等异步操作结束后通知主进程
- 观察者模式
4. NodeJS的优势
4.1 处理高并发、I/O密集场景优势明显。适用于web。
首先知道一个事实(常识):计算机CPU运算非常之快,应用的性能瓶颈主要出在I/O上。
CPU密集与I/O密集:
- CPU密集:计算、加密解密、压缩、图像处理等
- I/O密集: 文件操作、网络操作、数据库操作等
web场景:
- 静态资源获取
- 数据库操作频繁
- 渲染页面
5. 高并发应对之道:
- 增加机器数
- 使用更好的机器:多核cpu机器
- 使用更好的模型
线程与进程
- 进程:是计算机中的程序关于某数据集合行的一次运行活动,是系统进行资源分配和调度的基本单位。
- 多进程:启动多个进程,多个进程一块执行多个任务。
- 线程:进程内一个相对独立的、可调度的执行单元,与同属一个进程的线程共享资源
- 多线程:启动一个进程,在进程内启动多个线程,这样,多个线程可以同一时间执行多个任务。
Java处理高并发:
每来一个请求,就会因为IO操作而阻塞住,java采用多进程模式,为每个请求分配一个进。其劣势:
- CPU分配的最大进程数是有限的,超过限度就要排队。
- CPU大量时间处于空闲状态(IO操作占大头)。
nodejs处理高并发:

- cpu利用率高,IO操作不会阻塞cpu。
- event loop 主线程:cpu只开一个进程, 进程内也只开一个线程。
- 所谓的nodejs单线程指的是主线程,IO操作是系统底层多线程调度。
- nodejs与多核:使用cluster模块可利用CPU多核,在每个核上启动一个进程,不会浪费CPU多核能力。
6. 使用场景:
- web server: 高并发,IO密集
- 前端代码本地构建:低并发,cpu计算量大。从性能角度考虑,nodejs并不适合。但是由于前端工程师更熟悉js语法,前端代码构建打包等工具中nodejs应用非常广。
NodeJS 极简教程 <1> NodeJS 特点 & 使用场景的更多相关文章
- 超实用的 Nginx 极简教程,覆盖了常用场景
概述 什么是 Nginx? Nginx (engine x) 是一款轻量级的 Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向代理? 反向代理(Reverse ...
- 超实用的Nginx极简教程,覆盖了常用场景
概述 安装与使用 安装 使用 nginx 配置实战 http 反向代理配置 负载均衡配置 网站有多个 webapp 的配置 https 反向代理配置 静态站点配置 搭建文件服务器 跨域解决方案 参考 ...
- 超实用的 Nginx 极简教程,覆盖了常用场景(转)
概述 安装与使用 安装 使用 nginx 配置实战 http 反向代理配置 负载均衡配置 网站有多个 webapp 的配置 https 反向代理配置 静态站点配置 搭建文件服务器 跨域解决方案 参考 ...
- Typora极简教程
Typora极简教程 ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转换成有效的 HTML 文档.” ...
- CentOS安装使用.netcore极简教程(免费提供学习服务器)
本文目标是指引从未使用过Linux的.Neter,如何在CentOS7上安装.Net Core环境,以及部署.Net Core应用. 仅针对CentOS,其它Linux系统类似,命令环节稍加调整: 需 ...
- Asky极简教程:零基础1小时学编程,已更新前8节
Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...
- Python 极简教程(八)字符串 str
由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...
- Nginx 极简教程(快速入门)
作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4. ...
- 【转】Typora极简教程
Typora极简教程 Typora download ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转 ...
随机推荐
- 在具体的前端工作中通常HTML页面乱码怎么解决?
HTML文件乱码一般是因为编码格式不匹配造成的,比如:不同编码内容混杂.浏览器不能自动检测网页编码等等:但无论是哪种情况造成乱码,在HTML文件头中设置网页编码,匹配好编码格式就可. 下面是一个中文乱 ...
- 02-springboot整合elasticsearch初识
1.ReactiveElasticsearchOperations 根据springboot官网提供的Elasticsearch操作,除了用rest风格的,还有reactiveElasticS ...
- 手把手一起入门 RabbitMQ 的六大使用模式(Java 客户端)
原文地址:手把手一起入门 RabbitMQ 的六大使用模式(Java 客户端) 为什么使用 MQ? 在这里我就不多说了,无非就是削峰.解耦和异步.这里没有很多关于 MQ 的理论和概念,只想手把手带你一 ...
- UDP/TCP 流程与总结
1 UDP流程 前序:可以借助网络调试助手工具进行使用 1 UDP 发送方 1 创建UDP套接字 2 准备目标(发送方) IP和端口 3 需要发送的数据内容 4 关闭套接字 from socket i ...
- 【转】Web端测试点整理
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_24373725/article/d ...
- 005.Nginx配置下载站点
一 下载站点 1.1 下载站点配置 语法:autoindex on | off; 默认值:autoindex off; 配置段:http,server,location Nginx默认不允许列出整个目 ...
- BFC原理解析
BFC的概念 块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域. 它是 ...
- 数据可视化之powerBI技巧(十二)学会这几个度量值,轻松获取前N名
数据中的明细项一般都有很多,可是我们关注的往往只是前几名,所以在报表中只展示关注的部分,就十分常用. 有了上篇(这几个示例,帮你深入理解RANKX排名)关于排名的铺垫,仅显示前N名就简单多了. 依然以 ...
- Web Scraping using Python Scrapy_BS4 - Software
Install the following software before web scraping. Visual Studio Code Python and Pip pip install vi ...
- 【软件安装】CentOS7安装Tengine_2_3_2(Nginx 1_17_0)
简单比较一下Tengine 和Nginx 背景 使用最新的软件,可以处理一些bug,文章对CentOS6不做介绍(不会用) 推荐使用Tengine,理由是淘宝再用,兼容 Nginx 可以随时切换 Te ...