Node.js 在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核)

Node.js 应用程序运行于单个进程中,无需为每个请求创建新的线程。 Node.js 在其标准库中提供了一组异步的 I/O 原生功能(用以防止 JavaScript 代码被阻塞),并且 Node.js 中的库通常是使用非阻塞的范式编写的(从而使阻塞行为成为例外而不是规范)。

当 Node.js 执行 I/O 操作时(例如从网络读取、访问数据库或文件系统),Node.js 会在响应返回时恢复操作,而不是阻塞线程并浪费 CPU 循环等待。

这使 Node.js 可以在一台服务器上处理数千个并发连接,而无需引入管理线程并发的负担(这可能是重大 bug 的来源)。

Node.js 具有独特的优势,因为为浏览器编写 JavaScript 的数百万前端开发者现在除了客户端代码之外还可以编写服务器端代码,而无需学习完全不同的语言。

上面这是官网的介绍

下面来分析一下java服务器和nodejs服务器的优劣势,传统的web服务流程可以分为客户端<<--->>服务器<<-->>数据库,把客户端当成客人,把服务器当成餐厅的服务员,把数据库当成后厨

 

第一种情况:假如客人点餐都很快

java服务器,他的服务员是一对一服务的,不会去服务别人,假如餐厅有1000个服务员,正好来了1000位客人,会有1000个服务员(也就是1000个线程)来专门接待每一个客人,但是假如超过1000个客人,服务器就会崩,所以只能去增加餐厅的面积和服务员的数量,在真实情况中,就是需要正价服务器的容量,或者服务器矩阵和集群,就需要花很多钱。成本比较大,适合有资本的大厂

 

node服务器,他就只有一个服务员(也就是单线程)假如餐厅来了同时1000位客人,他会把第一个客人的菜告诉后厨,把第一个回调函数留在后厨,第二个、第三个。。。以此类推,他不需要在后厨等,要是菜做好了,厨师点一下回调他就很快会去拿菜。他可以继续给其他客人点菜,啥都不影响。回调天生适合处理高并发,所以配置低照样也没问题,成本低。

 

第二种情况:假如客人点餐都很慢(cpu密集型,大量复杂运算)

java服务器,他的服务员是一对一服务的,每个客人都需要5分钟才能点菜,就算来了同时1000个人,因为每个人都有自己对应的服务员,所以花费的时间相当于还是5分钟;不管有多少人,每个人的菜都能算的清清楚楚。这就是java的优势。

 

node服务器,因为只有一个服务员,假如有同时1000人,每个客人都需要5分钟才能点菜,那么就相当于在每个客人那都要花费5分钟,这个就是差别,所以node不适合cpu密集型,不太适合大量复杂运算的程序,这也是node的劣势

真正的大师,永远都怀着一颗学徒的心