由面试引发的Node.js的思考:高并发?异步非阻塞?

什么是Node.js?

Node.js api
Node.js究竟是什么?
简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

上文是菜鸟网站的解释。

Node.js是一个事件驱动I/O服务端JavaScript环境。
Node.js 如何实现高并发?

关于 Nodejs 服务器高并发的疑问可以进去看看。
下面是pzzccn的回答:
CPU密集型本身就不适合nodejs,但非常适合大量io操作的情况。 假设一个请求流程是10ms的简单运算,生成sql语句,900ms的数据库查询并返回。90ms的数据数据并返回。完整时间是1s。 如果是java处理 如果是1000个请求,不在考虑数据库压力的情况下,理论上java会并发产生1000个线程来处理,理论上也就可以在1s内处理完1000个请求并全部返回数据。 单位为了这1000个线程,服务器可能产生了百分之80的资源消耗。也就是说你这台服务器能支撑1000个并发已经很好了。 如果是nodejs处理 如果1000个请求,从第一个请求开始,10ms处理完成,然后就交给数据去处理了,这个时候就可以处理下一个10ms的请求。也就是我需要10s才可以接收完所有的请求, 但是第一个请求返回时间是1s,第二个请求返回时间是1s+10ms,以此类推,但是这1000个并发nodejs会在11s左右全部处理完。 你可能觉得java是1s,nodejs是11s,差距很大,但是需要注意的是服务器消耗。 java是1000个进程可能已经是服务器的极限看了,但是nodejs服务器确一点事情都没有。
---------------------------------------以上---------------------------------------------
Node.js是单线程的,在处理cpu密集型操作时,线程会阻塞,所以并不适合Node.js。但在处理io密集型操作时,会将操作交给底层的c++模块的线程池操作。待执行完毕再回调用通知。理论上来说只要内存够大,Node.js就可以处理更多的并发。但是整体的响应时间会随之拉长。此时拉起多个Node.js服务,那么整体的响应时间应该是: 单个服务处理所有并发请求的响应时间/启动的Node.js服务数量。 欢迎评论讨论。

什么是异步非阻塞?

想要知道什么是异步非阻塞,就要了解 同步、异步、阻塞、非阻塞的概念
怎样理解阻塞非阻塞与同步异步的区别?
上文是知乎中比较靠谱的解答。

从nodejs执行环境的表象来看异步:调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,类似的nodejs中通过回调函数处理这个调用。

阻塞与非阻塞

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

Node.js 的事件驱动?

待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值