Nodejs环境下,nestjs 是怎么和 spring,go(gin)这些原生支持多线程框架竞争的?
菜鸟好奇的问下,各位大佬乱入~~~
单线程是不是只能小打小闹?
Nodejs环境下,nestjs 是怎么和 spring,go(gin)这些原生支持多线程框架竞争的?
你关心这个干嘛,一般人一辈子大概率不会拥有 node 单进程解决不了的网站,web 应用不是 cpu 密集,js 这类异步语言单线程足够满足 99.9%程序。
且人家 node 的 web 应用天生就支持多进程部署,程序都不用改。
一楼正解。
别动不动就多少并发的,互联网上大部分的网站根本不需要多少并发,就是一个资源转发,单进程几十个人的用户完全没问题。
同楼上,一般人也用不到 nestjs ,这种模仿 spring 的项目就是个伪需求。绝大多数项目只需要 express ,高级点 eggjs 就可以搞定。
新人不要太多关注这些宏大概念,先把业务摸透,把基础打扎实才是王道。
- 是的,小打小鬧
2. 是的,一般你也閙不大
3. 閙大了再花點小錢請幾個 JAVA crud 仔重寫
node.js 原生有多进程支持. 那种一个连接起一个线程的框架也没什么技术含量
因为。。不需要考虑这个。。。跑多线程的方式那么多,框架又是支持异步和流式的,所以在这点上是无所谓的。。。
另外,他的竞争对手是 node 平台的其他框架。。。你跨到 java 和 go 上,没啥可比的
nestjs + k8s 或者上 serverless,同样能抗住,但是谁有这么多客户.
我们业务每天差不多 1E 次调用,k8s16 个 pod 游刃有余
我的理解是 现在的 web 应用几乎都是 IO 密集型,IO 密集型的程序使用多线程没有太大的优势
IO 密集型有异步
nodejs 线程模型挺厉害的,主要是好几个大佬在上面搞了高效利用线程的东西,反而 Java 这边思维固化了,虚拟线程的理念最先的实践就是 nodejs (绿色线程)
哪有这么多需要高并发的东西。
大部分生意,只需要把东西做出来。
性能什么的,等你需要考虑,你已经基本上不差钱来招人干这个了
跨语言竞争多少有点离谱了,nodejs 的优势也不在这
跨语言竞争就算了,你还拿解释性语言和编译性语言竞争,你搁这降维打击呢
到计算密集任务的时候,node 直接就挂 C++ addon 了。IO 密集那 node 的优势可太大了。
Redis 单线程为什么这么快? 和这个问题差不多。
云原生,无服务计算呀
对 nestjs 不了解,但对 Node 比较了解。
Node 的非阻塞 IO 只有计算部分是单线程,IO 部分是多线程的。
虽然 Node 支持多线程、多进程,但实际上微服务集群出现之后,单实例是不是多线程也没啥关系,堆集群节点数量就好了,负载均衡一分。只有真正在一个业务流程过于冗长需要多线程、多进程来优化的时候,才需要专门去做多线程、多进程设计。
特别是云原生之后,同一个微服务的集群节点都可能同时在不同服务器上,而且被动态调整。
Spring 的优势在于人才量大管饱,可能直到目前任何其他语言框架依然都没法竞争过 Spring 。
Go 实际上是被专门设计成一种,专门用于解决企业多人合作生产痛点的“产品”,牺牲灵活性来提升开发产能。我也不认为 nestjs 能竞争过 Go 。
几十个人?恐怕十几万人的用户也没问题哦。
在Node.js环境下,NestJS作为一个框架,虽然Node.js本身是基于单线程模型的,但NestJS通过一些策略与Spring、Go(Gin)这些原生支持多线程的框架竞争。
首先,NestJS利用Node.js的异步非阻塞I/O特性,在处理高并发请求时表现出色。它使用事件驱动模型,使得I/O操作不会阻塞主线程,从而提高了应用程序的吞吐量。
其次,虽然Node.js单线程模型在处理CPU密集型任务时存在局限性,但NestJS可以通过引入worker_threads模块实现多线程。以下是一个简单的示例代码,展示了如何在NestJS中创建和管理worker_threads:
import { Injectable } from '@nestjs/common';
import { Worker, isMainThread, parentPort, workerData } from 'worker_threads';
@Injectable()
export class WorkerService {
// ...(代码省略,具体实现可参考多线程管理示例)
}
通过这种方式,NestJS能够处理计算密集型任务或需要并行处理的任务,从而提高了整体性能。
此外,NestJS提供了模块化、面向对象的程序设计方式以及强大的依赖注入系统,使开发者能够轻松地构建复杂的Web应用程序。这些特性使得NestJS在竞争激烈的市场中脱颖而出,成为与Spring、Go(Gin)等框架相媲美的优秀选择。