乐趣区

关于node.js:Nodejs-的相对于其他语言的优势分析

Node.js 是一门在浏览器外运⾏ JavaScript 的语言,运行时引擎是 V8(Google Chrome 的内核)。
也就是说能够用同一个技术栈去写 web 前后端的实现代码,
这个个性应该是在所有语言中应该是举世无双的

Node 是天生非阻塞式的异步 io 语言
主线程是单线程,主线程中的操作是同步阻塞的。但它把所有须要异步的操作扔给了 IO 线程池,主线程通过肯定的事件轮询机制与 IO 线程池交互失去异步数据。,这便是 node 单线程和事件驱动的精华之处了。
— 具体参见 NodeJs 的 Event loop 事件循环机制详解

这个个性使得 nodejs 应用在高并发互联网、物联网、数据中台更具劣势

你可能会问为何具备高并发的劣势?要从以下几点说
1. 数据类型是弱类型的劣势,弱类型在传值的时候,是不会去强制转化类型的,弱类型简直都是 json 操作。因而在数据传递转换方面是缩小了开销的。
例如其余强类型语言,在 c 层须要转换成承受的 vo 模型,s 层还须要转化成 do 模型,dao 层还须要转化成实体模型。这些在运行时都会在内存中耗费性能。尤其是在数据在乘以万倍以上的状况下。

2.nodejs 的异步 IO 实现的形式,是无锁线程模型,用一个过程实现多个线程的模型,WorkerThread 间及主线程间不能应用同一块内存。这种模型在单节点有比拟高吞吐量与低提早个性,比用 Cassandra 的实现模型速度要快。

劣势方面,以下几点
1. 正是因为是弱类型,所以对于开发的程序员技术上的要求会更多,须要提供清晰的 api 文档,和残缺单元测试和覆盖率。
2.Cpu 密集计算的业务场景,如果业务须要做大量的高复杂度计算,那么选多线程模型语言可能更具备劣势,nodejs 须要用多 Worker 的形式来进步 cpu 的利用率。

总体言之:
对于其余语言中规中矩,nodejs 下限会更高,同时上限也很低。
开发人员如果对业务清晰,多利用其异步个性,在避开 nodejs 的弱点,那么就能输入更高效的程序。

退出移动版