栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

go 比 java 并发高

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go 比 java 并发高

Java语言给人的印象是长盛不衰,从笔者上大学的时候,就不断地听到有什么语言会取代Java的观点,但时至今日,Java依然是应用范围最广的语言。并不是Java有多么完美,而是Java依托Oracle这个庞大的生态系统,在可预见的未来无人能撼动。也正因为这样,Java也愈加成熟完善。

但是在网络开发领域,Java并非一枝独秀。源于互联网开发的特点,对并发性的要求较高。而go语言实施起来较为简便,而且并发性较好,运行效率较高,同时也具有一定的安全性。对于很多讲究简洁精悍的网站,用go语言来开发网站后台就显得比较完美。

从语言的特性来讲,Java与C有较大的差异,而go与C则更为接近。有些人认为go是介于C和C++之间的语言,但其实并不是,这个我们稍后再说。正因为它类C的特点,所以有C语言基础的同学上手go会特别的容易。和Java相比,go语言最大的特点是简洁,将关联数组内嵌其中,算法简洁。同时,从并发性角度来讲,go解决了并发编程中的很多问题,毕竟比Java年轻十几岁,可以说go站在了巨人的肩膀上,在CPU缓存方式、线程、锁进行了优化,数以万计的协程能够顺利在一个进程中执行,并且保持较高的性能。

在GC回收方面,从理论上讲go在算法上进行了大量的优化,解决了Java中存在的GC暂停的情况。其实,坦白的讲,在实际应用中,笔者尚未体验到其GC优化后的便利,但至少go的垃圾收集器采用了并发特性,非常适合当前很多服务器的硬件属性。至于go的内存调优,还是一个值得商榷的问题。

找来一些资料,分享一下,也许能对题主的问题有所帮助。

作者:我是皇上

来源:CSDN博客

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。GC吞吐量:GC时间与堆大小同步增长。简单来说,你的程序使用的内存越多,内存释放速度就越慢,你的计算机花费的时间就越多。如果你的程序没有并行化,你可以不用考虑这个问题。

整理:因为没有整理,GC 过程会产生内存碎片。程序也不会受益于在缓存中整齐排列的内容。

程序吞吐量:因为GC必须在每个周期做很多工作,所以会消耗不少CPU时间。

暂停分布:与程序并发运行的任何垃圾收集器都可能遇到Java中“并发模式失败”的问题:您的程序创建垃圾的速度比GC线程可以清除它快。在这种情况下,runtime别无选择只能完全停止程序,等待GC完成垃圾收集。因此当Go团队声明GC暂停非常低时,该声明只能适用于GC具有足够的CPU时间和空间以完成垃圾回收的情况。另外,由于Go编译器缺乏确保线程可以被快速可靠暂停这一功能,会导致暂停时间是否很低取决于您运行的是什么类型的代码(例如,base64 解码单个 goroutine 中的大 blob 会导致暂停时间上升)。

堆开销:因为通过标记/扫描收集堆非常慢,您需要大量的空间以确保不会遇见“并发模式故障”。 Go默认使用100%的堆开销会让程序需要的内存量增加一倍。

从面向对象的角度来比较,go并非真正意义上的面向对象编程的语言。面向对象必须满足:封装、继承、多态三大特点,在Java中class的属性和方法,在go中是不存在的,在继承方面,go至少与Java的继承方式不一样。可以说go与面向对象的定义打了擦边球,和面向过程的C相比,适应了很多应用场景。在go语言中,同一struct可实现多个接口,使得它比C的应用场景大为扩展。

虽然go语言被称为网络时代的C语言,但笔者并不建议初学编程就接触go。你可以像计算机专业的同学一样,从C开始,打好基础;也可以直接从Java开始入门,从而有更多的工作职位可供选择。虽然go近年来的上升势头较快,但其优势也并非绝对明显,所以将go作为第二或第三语言还是比较合适的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944912.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号