nodejs cluster_NodeJS 极简教程 lt;1gt; NodeJS 特点 amp; 使用场景
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; 使用场景相关推荐
- 《Node.js 极简教程》 东海陈光剑
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. https://nodejs. ...
- 《Kotlin极简教程》第三章 Kotlin基本数据类型
正式上架:<Kotlin极简教程>Official on shelves: Kotlin Programming minimalist tutorial 京东JD:https://item ...
- 负载分析及问题排查极简教程
作者 | Hollis ,来自 | Hollis 平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load.cpu.mem.qps.rt等.每个指标都有其独特的意义,很多时候在线上出现问题时 ...
- 高效sql性能优化极简教程
一,sql性能优化基础方法论 对于功能,我们可能知道必须改进什么:但对于性能问题,有时我们可能无从下手.其实,任何计算机应用系统最终队可以归结为: cpu消耗 内存使用 对磁盘,网络或其他I/O设备的 ...
- session一致性架构设计极简教程
一,缘起 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文. Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建se ...
- 写一个操作系统有多难?自制 os 极简教程
不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了满足程序员们自带的成就感,还是为 ...
- 《Groovy极简教程》第12章 Groovy的JSON包
<Groovy极简教程>第12章 Groovy的JSON包 Groovy自带了转换JSON的功能,相关类都在groovy.json包下.本文参考自Groovy文档 Parsing and ...
- Kotlin极简教程
目录 Kotlin极简教程 前言 视频教程 Kotlin 系统入门到进阶 Kotlin 从入门到放弃 Kotlin 从零基础到进阶 第1章 Kotlin简介 第2章 快速开始:HelloWorld 第 ...
- Rust 编程语言极简教程 --- 实例学习
Rust 编程语言极简教程 --- 实例学习 安装 $ curl https://sh.rustup.rs -sSf | sh info: downloading installerWelcome t ...
最新文章
- [原创]Net实现Excel导入导出到数据库(附源码)
- 图片上传组件_博客必备功能,拖拽上传图片!
- 线性代数笔记:Frobenius 范数
- java 反射 成员变量_java使用反射访问成员变量的值示例
- 故乡的路:十位少数民族摄影师联展
- 虚幻引擎插件 - Maya LiveLink - 安装和使用
- 多种云资源管理用什么软件好?你知道吗?
- FastDFS原理及工作流程
- TwinCAT3入门教程2-程序工程创建
- 深入理解快速排序和 STL 的 sort 算法
- BottomNavigationView 动态切换Icon且保留原图颜色
- 论初唐诗人的历史地位-上官仪、王勃、杨炯、陈子昂、杜审言
- MAC 升级php 到7.1
- 门禁管理系统(Swing/Dos)
- 2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
- 贝格尔编排法的PHP实现
- 计算机英语名词简释(转载)
- 给新浪博客修改博客名字 超级简单图文教程
- 为什么现在真正的黑客越来越少了?
- Wave2000 plus简介