Node.js之Web开发入门(node是什么)-No.1

1、Node.js入门-什么是Node.js

1、我们首先来说一下官网对Node.js的说明: Node.js就是构建在chromeV8引擎上的JavaScript运行时,就好比说是java的JRE,那么 Node.js就是让JavaScript运行在服务器上的运行环境,但是严格的说这句话也并不完全正确,因为node.js并不包括JavaScript全集,没有DOM和BOM,只包含ECMAScript。
2、另外官网上介绍了Node.js的两个特性, 事件驱动非阻塞I/O
3、为什么偏爱Node.js?web可以说是Node.js最擅长的领域了
(1)前端职责范围变大,统一开发体验

(2)Node.js的两个特性使得在处理高并发,I/O密集场景性能优势明显

  1、这里有个概念,什么是I/O密集和CPU密集,CPU密集:压缩,解压,加密,解密I/O密集:文件操作,网络操作,数据库

  2、为什么Web中存在这么多I/O密集,因为有静态资源的读取数据库操作渲染页面,所以到现在你就明白了为什么Node.js这么擅长在Web的领域了。

4、高并发应对之道

(1)什么高并发:在单位时间里的访问量特别多,就是高并发

(2)应对之道:增加机器数增加每台机器的CPU-多核

5、进程

(1)进是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基础单位。

(2)比如说我们在电脑中使用的浏览器,又打开了音乐播放器,它们都是一个个程序,需要系统分配给内存才能执行,简单的说进程就是进行中的程序

(3)单核的CPU又为什么能一遍停音乐一遍上网,不是说底层的指令是一条一条执行的么,这里和口技一样,听着貌似是人能同时发出很多声音,但其实是间隔发音,ABABABA,在速度极快的时候A和B听起来就是同时发出的。所以计算机也是在极短的时间内切换不同的指令,使得单核CPU看起来能处理多个任务

(4)多进程:启动多个进程,多个进程可以一块执行多个任务

6、Node.Js工作模型

(1)传统的java Server是怎么处理Web请求的?比如在一个饭店里,每个厨师(I/O操作)配一个服务员(CPU),面对一个Web请求,CPU一运算(服务员点完菜)就交给I/O操作(大厨做饭),面对Web的高并发,这种方式就只能继续多招聘服务员和大厨,面对每个请求,服务器都要开一个进程,CPU就简单计算一下(10%不到的工作量)后给I/O操作,但是I/O操作是阻塞型的,面对更多的请求,服务器就进入多进程。但是面对更多更多的请求问题就来了,CPU(服务员)太闲了,每个服务员配一个厨师,在自己的厨师做饭时没事干,CPU利用率低,在空转,所以加上CPU分配最大的进程数有限,并发数到了一定上限就要排队了

(2)Node.js模型就很好的解决了这个问题,Node.js模型就相当与只有一个服务员,服务员接待一个顾客后没有闲着,继续接待下一个顾客。下图中Client就是成千上万的Web请求,都给Event loop这一个服务员,服务员也不会给你真的回应(饭),统统交给后台多线程(很多大厨)处理,后台处理完就告诉服务员,服务员就给顾客(web回应),但不一定是按照顺序,谁的先好了就先回应谁。这里好处就是服务器只开一个进程,即CPU占用率很低,留着其他那么多CPU还能干其他事


Node.js之Web开发入门(node是什么)-No.1_第1张图片

那么可以看到Event loop是CPU开一个进程,该进程里只包含一个线程。所以我们常说的Node.JS是单线程的,是因为单线程只针对主进程,它只负责听,而很多操作是交给操作系统,交给I/O操作系统进行多进程多线程的调度

7、线程

(1)线程:进程内一个相对独立的,可调度的执行单元,于同属一个进程的线程共享进程资源

(2)单线程:一个进程里只有一个线程,进程的所有资源归这一个线程用

(3)多线程:一个进程里有多个线程,这样多个线程也可以一块执行多个任务

8、所以说我们说Node.js性能好一定是有前提的:web场景高并发I/O密集(CUP密集就相当于每个顾客都点了1000个菜,服务员点菜都点晕了)

9、Node.js常用场景:Web Server ,本地代码构建实用工具(爬虫)

你可能感兴趣的:(Node.js之Web开发入门(node是什么)-No.1)