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 cluster_NodeJS 极简教程 lt;1gt; NodeJS 特点 amp; 使用场景相关推荐

  1. 《Node.js 极简教程》 东海陈光剑

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. https://nodejs. ...

  2. 《Kotlin极简教程》第三章 Kotlin基本数据类型

    正式上架:<Kotlin极简教程>Official on shelves: Kotlin Programming minimalist tutorial 京东JD:https://item ...

  3. 负载分析及问题排查极简教程

    作者 | Hollis ,来自 | Hollis 平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load.cpu.mem.qps.rt等.每个指标都有其独特的意义,很多时候在线上出现问题时 ...

  4. 高效sql性能优化极简教程

    一,sql性能优化基础方法论 对于功能,我们可能知道必须改进什么:但对于性能问题,有时我们可能无从下手.其实,任何计算机应用系统最终队可以归结为: cpu消耗 内存使用 对磁盘,网络或其他I/O设备的 ...

  5. session一致性架构设计极简教程

    一,缘起 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文. Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建se ...

  6. 写一个操作系统有多难?自制 os 极简教程

    不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了满足程序员们自带的成就感,还是为 ...

  7. 《Groovy极简教程》第12章 Groovy的JSON包

    <Groovy极简教程>第12章 Groovy的JSON包 Groovy自带了转换JSON的功能,相关类都在groovy.json包下.本文参考自Groovy文档 Parsing and ...

  8. Kotlin极简教程

    目录 Kotlin极简教程 前言 视频教程 Kotlin 系统入门到进阶 Kotlin 从入门到放弃 Kotlin 从零基础到进阶 第1章 Kotlin简介 第2章 快速开始:HelloWorld 第 ...

  9. Rust 编程语言极简教程 --- 实例学习

    Rust 编程语言极简教程 --- 实例学习 安装 $ curl https://sh.rustup.rs -sSf | sh info: downloading installerWelcome t ...

最新文章

  1. [原创]Net实现Excel导入导出到数据库(附源码)
  2. 图片上传组件_博客必备功能,拖拽上传图片!
  3. 线性代数笔记:Frobenius 范数
  4. java 反射 成员变量_java使用反射访问成员变量的值示例
  5. 故乡的路:十位少数民族摄影师联展
  6. 虚幻引擎插件 - Maya LiveLink - 安装和使用
  7. 多种云资源管理用什么软件好?你知道吗?
  8. FastDFS原理及工作流程
  9. TwinCAT3入门教程2-程序工程创建
  10. 深入理解快速排序和 STL 的 sort 算法
  11. BottomNavigationView 动态切换Icon且保留原图颜色
  12. 论初唐诗人的历史地位-上官仪、王勃、杨炯、陈子昂、杜审言
  13. MAC 升级php 到7.1
  14. 门禁管理系统(Swing/Dos)
  15. 2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
  16. 贝格尔编排法的PHP实现
  17. 计算机英语名词简释(转载)
  18. 给新浪博客修改博客名字 超级简单图文教程
  19. 为什么现在真正的黑客越来越少了?
  20. Wave2000 plus简介

热门文章

  1. anaconda管理环境
  2. 《scikit-learn》随机森林之分类预测乳腺癌模型
  3. 深度学习《VAE-GAN》
  4. 安装oracle未生成tnsnames.ora文件
  5. [软件工程-设计模式] GRASP软件设计的模式和原则
  6. JMS学习之ActiveMQ-简单使用
  7. oppo r9 android7.0,OPPO R9 Plus的手机系统是什么
  8. PointConv论文阅读笔记
  9. 单自由度阻尼强迫振动通解求导及simulink验证(修正了网上常见的错误)
  10. 数字图像处理--彩色图像转灰度图像