| 特性 | nodejs | java | golang |
| 最早发布时间 | 2009 | 1996 | 2012 |
| 主流web框架 | express/Sequelize | springboot/springcloud | gin/gorm |
| 多线程 | v10.5.0后支持 | 天生支持 | 天生支持 |
| 协程 | 支持 | 暂不支持 | 支持 |
| 面向对象 | 原生不支持,可模拟,不支持多态 | 原生支持 | 面向过程,不支持继承 |
| 异常处理 | 不够完善,容易产生性能问题 | 稳定成熟 | 较完善 |
| 标准库 | 高速发展中 | 稳定完善 | 完善 |
| 异步IO | 语言级别支持 | 1.7后支持NIO | 协程支持 |
| app可靠性 | 单线程单进程模式,通过负载均衡、自杀重启提升能力 | 支持多线程,支持多核,更加灵活可靠 | 支持多线程,支持多核,更加灵活可靠 |
| 注解、反射、泛型 | 无 | 原生支持 | 支持反射,泛型尚未成熟 |
| 扩展性 | C/C++编写的逻辑扩展 | 支持C/C++/及其他可被JVM执行语言编写的逻辑扩展 | 支持跨语言调用 |
| 垃圾回收 | 分代回收 | 普遍分代回收,有多种垃圾回收算法可供选择 | 标记清除 |
| 擅长场景 | IO密集web场景 | 大数据、企业开发、android,微服务 | 云原生,微服务 |
| 开发人员主要来源 | 前端人员 | 服务器端人员 | 服务器端人员 |
| 必备知识体系 | 浏览器平台+nodejs | linux、数据库、网络、高并发、系统监控 | linux、数据库、网络、高并发、系统监控 |
| 杀手锏 | 低资源下高并发 | 生态圈完善活跃 | 与k8s是兼容性好、可编译成二进制 |
架构选型建议:
统治级别领域,不分大小厂且无视开发人员水平
android、大数据 :android、大数据 java护城河目前没有匹敌者
算法、内核级别:c/c++几十年沉淀,新挑战者力量尚且不足
业务系统领域(各种cms、web类型),需要考虑开发人员水平与数量
演示型web:前后端统一,性价比更高
需求明确+IO密集场景:推荐nodejs
功能复杂或者需求不明确:推荐java,有各种企业级轮子可供选择搞定一切,容易招人
云原生:推荐golang,k8s是当下主流并且也是golang构建,golang类接口更加友好



