高并发需要区分什么类型的高并发,如果是CPU密集型,毫无疑问JAVA更优,如果是IO密集型则GO更优。

多数情况下我们面临的并发瓶颈都是IO,所以从这个角度去看待楼主的问题,GO从原生语言层面就支持线程层面的协程调度,无疑对内存、CPU的消耗更低,展开来讲就是协程的创建、内存的占用比线程都要低的多,同时协程由程序自己调度,避免了CPU频繁的切换线程带来的性能损耗。

但是,国内为什么并没有大规模的弃JAVA启GO呢?个人觉得有几点原因:

首先,在复杂的业务场景中,GO对业务的支撑并没有比JAVA优秀,JAVA有完善的全家桶依赖库和框架,GO很多生态库都比较弱,甚至于缺少很多,在开发维护成本上会比较高。

其次,GO的从业人员相比较JAVA还是少很多,虽然你觉得GO语法简单,但是让一个小白能写出合格的GO代码要比JAVA难的多,JAVA对新手可以做到小白式填鸭,GO如果乱填后期真的无法维护。

再次,GO目前还是更适合在对速度、性能有要求的专项领域里面,特别是流媒体处理,底层运行平台、中间件等方向,向下可以随意对接C,向上可以支撑JAVA类似语言的业务开发,非业务化的代码可维护性也更高。

最后,多数高并发场景面临的主要还是数据库的IO太高,而不是程序本身,JAVA通过多增加实例解决的问题,非得用GO去写意义不算很大,除非客户就给你1-2台机器,提出了苛刻的需求,那么这个时候用GO去写无疑是最明智的。


小期待一点,如果GO可以开发完善的PC端应用,我觉得在桌面应用端可以搏一把。