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 特点 & 使用场景的更多相关文章

  1. 超实用的 Nginx 极简教程,覆盖了常用场景

    概述 什么是 Nginx? Nginx (engine x) 是一款轻量级的 Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向代理? 反向代理(Reverse ...

  2. 超实用的Nginx极简教程,覆盖了常用场景

    概述 安装与使用 安装 使用 nginx 配置实战 http 反向代理配置 负载均衡配置 网站有多个 webapp 的配置 https 反向代理配置 静态站点配置 搭建文件服务器 跨域解决方案 参考 ...

  3. 超实用的 Nginx 极简教程,覆盖了常用场景(转)

    概述 安装与使用 安装 使用 nginx 配置实战 http 反向代理配置 负载均衡配置 网站有多个 webapp 的配置 https 反向代理配置 静态站点配置 搭建文件服务器 跨域解决方案 参考 ...

  4. Typora极简教程

    Typora极简教程 ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转换成有效的 HTML 文档.” ...

  5. CentOS安装使用.netcore极简教程(免费提供学习服务器)

    本文目标是指引从未使用过Linux的.Neter,如何在CentOS7上安装.Net Core环境,以及部署.Net Core应用. 仅针对CentOS,其它Linux系统类似,命令环节稍加调整: 需 ...

  6. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

  7. Python 极简教程(八)字符串 str

    由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...

  8. Nginx 极简教程(快速入门)

    作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4.  ...

  9. 【转】Typora极简教程

    Typora极简教程 Typora download ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转 ...

随机推荐

  1. npm和webpack

    npm是前端开发中常用的一种工具,对于普通开发者来说,便于管理依赖. 往大了说,便于共享代码.写完代码,使用npm发布以后,然后别人用npm可以方便地共享到你的代码. npm的使用: mac环境下的安 ...

  2. Selenium之浏览器驱动下载和配置使用

    浏览器驱动下载 Chrome浏览器驱动:chromedriver , taobao备用地址 Firefox浏览器驱动:geckodriver Edge浏览器驱动:MicrosoftWebDriver ...

  3. 51nod1524 最大子段和V2

    题干 N个整数组成的序列a[1],a[2],a[3],-,a[n],你可以对数组中的一对元素进行交换,并且交换后求a[1]至a[n]的最大子段和,所能得到的结果是所有交换中最大的.当所给的整数均为负数 ...

  4. linux篇---根据端口号查看进程位置

    1)说明:Linux的所有进程都保存在/proc/目录下,保存形式为:/proc/进程号.进入到进程号目录后,里面有一个cwd链接文件即指向的进程的的目录. 2) 操作: A:根据端口号查进程 如:l ...

  5. requests接口自动化8-传递数据为xml形式的post请求:data

    传递数据为xml形式的post请求 请求体内容: <?xml version=“1.0” encoding = “UTF-8”?> <COM> <REQ name=&qu ...

  6. java 面向对象(十五):面向对象的特征三:多态性

    1.多态性的理解:可以理解为一个事物的多种形态.2.何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)举例:Person p = new Man();Object obj ...

  7. redis(一):Redis 数据类型

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). String(字符串) st ...

  8. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  9. 008.Nginx静态资源

    一 Nginx静态资源概述 1.1 静态资源类型 Nginx作为静态资源Web服务器部署配置, 传输非常高效, 常常用于静态资源处理,请求以及动静分离.通常非服务器动态运行生成的文件属于静态资源. 类 ...

  10. ajax+jquery+JSON笔记

    ajax (asynchronous javascript and xml -- 基于javascript和xml的异同步通讯技术)    特征: 异步通讯  异步的请求-响应模式     1.传统的 ...