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的弱点,那么就能输出更高效的程序。