Golang的巨大性能优势,行业案例
需求场景
①、主要二次开源云原生的CRD,自定义控制器,包括CRD的操作者自定义
②、K8S的二次开发,prometheus基于吞吐量做扩容的时候,官网的定义的CRD
没有实现高并发,需要二次开发
Golang语言产生的背景主要有以下几个方面:
①、并发编程需求:对比其他语言:
java性能问题:系统调用耗费太多的CPU
c++是内存管理的问题:出现内存管理的太复杂,很出现容易内存泄漏
因此,Google公司希望开发一种新的编程语言,既有java的内存管理能力和c++的
性能,而且更加的简洁,易于学习和使用
Go语言的特色
1、高并发性:Go语言原生支持协程和通道,可以轻松实现高并发程序,并且在
多核,分布式等场景下表现优异。java也支持高并发,但是在底层的线程的调度这
块没有Golang做的好,并发性更高一些
1.1、Go语言使用了goroutine:轻量级线程和channel通道的方式,可以轻松实现并
发编程,避免了多线程编程中的一些问题。java是重量级线程:java8线程和操作系
统的线程是1对1的绑定关系。而在golang当中是很多个协程对应一个操作系统线
程。
1.2、java中的线程睡眠,线程切换等涉及到的操作系统层的重量级调用,就是线
程切换或者加锁解锁都是因为需要用户态和内核态的切换,从而导致的开销大。发
生系统调用,一个应用程序从用户态到内核态,就需要执行系统调用用户态转化到
内核态,需要执行系统调用,保存现场,也就是保存用户态的寄存器等然后去系统
调用,并在内核态执行,最后恢复现场,并且由于内核对于用户的不信任,因此
内核需要对用户进行一些额外的检查,这就需要更耗费更多的工作了。
1.3、尽管系统调用使用了“快速系统调用”指令,但耗时仍大约在200ms+,多的可
能到十几us每个系统调用内核更进行许多工作,大约需要执行1000条左右的CPU
指令。
2、内存安全性:Go语言通过垃圾回收机制和指针限制等手段,避免了常见的内存
错误(如缓冲区溢出,野指针等),提高了程序的可靠性。借鉴了 JVM的垃圾回收机
制。
2.1、这个内存安全相对于C++语言来说的,C++语言是手动的来内存分配和释放
的:要求开发人员的水平比较高,如果不小心导致内存泄漏的话就会造成程序崩
溃。
2.2、自带的内存管理机制,避免了没有及时回收导致的内存泄漏和程序崩溃等
等。GC性能可能随着版本不断更新会不断优化,go团队中有HotSpot开发者,应
该会借鉴jvm gc的设计思想,比如分代回收,safepoint等。
3、快速编译:Go语言的编译速度很快,即使在大型项目中也不会出现明显的编译
延迟,同时Go语言生成的可执行文件体积小,运行速度快,不耗费资源。
4、简单易学:Go语言语法简单,结构清晰,易于学习和使用,它的标准库设计也
非常简洁,同时便于开发者上手使用
5、跨平台支持:Go语言可以在多个操作系统 和硬件平台上编译执行,具有很好
的跨平台支持性能
6、丰富的工具链:Go语言提供了一系列的 工具,例如,go fmt,go vet,go test
等。帮助开发者更加方便地进行代码格式化,检查,测试等工作。
7、天然的支持网络编程:Go语言标准库中包含了丰富的网络编程接口,可以轻松
实现web应用程序和分布式系统等。
总之,Go语言是一种简单,高效,安全,易学,并发性强的编程语言,它因其多
个特点而备受青睐,在互联网,大数据,网络编程等领域得到了广泛的应用。简单
来说,Go语言是一种在执行效率和开发效率上都能兼备的语言 。而且go占用内存
没有java占的内存那么多。