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).它允许人们 “使用易读易写的纯文本格式编写文档,然后转 ...
随机推荐
- Spring Boot -- 启动流程分析之ApplicationContext 中
上一节我们已经分析到AbsractApplicationContext类refresh方法中的postProcessBeanFactory方法,在分析registerBeanPostProcessor ...
- 石子合并——区间dp
石子合并(3种变形) <1> 题目: 有N堆石子排成一排(n<=100),现要将石子有次序地合并成一堆,规定每次只能选相邻的两堆合并成一堆,并将新的一堆的石子数,记为改次合并的得分, ...
- uni-app网络请求
对于 GET 方法,会将数据转换为 query string.例如 { name: 'name', age: 18 } 转换后的结果是 name=name&age=18. 对于 POST 方法 ...
- Docker 安装并使用mysql
上一篇介绍了Docker在CentOS中的安装,本文介绍如何在Docker中安装并使用mysql 1.拉取最新的mysql镜像 [root]# docker pull mysql 2.查看已有镜像 [ ...
- C# DataTable与Excel读取与导出
/// <summary> /// Excel->DataTable /// </summary> /// <param name="filePath&q ...
- Scrapy(五):CrawlSpider的使用
Scrapy(五):CrawlSpider的使用 说明 :CrawlSpider,就是一个类,是Spider的一个子类,也是一个官方类,因为是子类,所以功能更加的强大,多了一项功能:去指定的页面中来抓 ...
- The Modules of Event-driven
常用的时间驱动模型(Windows和Linux都有)有三种: 1.select 对于读(Read)事件.写(Write)事件和异常(Exception)事件分别创建事件描述符集合,分别用来收集读事件的 ...
- YAPI工具配置LDAP统一用户认证
背景:因为搭建了LDAP,因此希望将所有配置库或工具都使用LDAP进行统一用户认证,YAPI是其中一个. YAPI:使用docker-compose进行了安装,具体安装步骤自行百度. LDAP:使用d ...
- CocosCreator之AssetBundle使用方案分享
前言 Creator2.4 推出了AssetBundle,使得所有平台都有了分包的能力.那么该如何使用这个强大的功能呢?下面介绍一下我个人的用法,仅供参考,水平有限,非喜勿喷. 根据官方文档 指出,之 ...
- 十分钟快速搭建Python+Selenium自动化测试环境(含视频教程)
文章首发于微信公众号:爱码小哥 准备安装包: 一:安装python: 双击python-3.7.6.exe执行文件 2.点击下一步正在安装: 3.如图所示表示安装完成: 校验环境是否安装成功: ...