Go语言编程系列(一)

简介: Go语言编程系列(一)

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占的内存那么多。

相关文章
|
1天前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
1天前
|
Go
go语言注释,标识符 | 17
go语言注释,标识符 | 17
|
2天前
|
存储 缓存 Go
go语言编程系列(五)
go语言编程系列(五)
|
2天前
|
搜索推荐 Java 编译器
go语言编程系列(四)
go语言编程系列(四)
|
1天前
|
存储 缓存 安全
速成班!去繁存简,一文让你学会go语言基础!!
速成班!去繁存简,一文让你学会go语言基础!!
|
2天前
|
存储 JSON 安全
go语言编程系列(七)
go语言编程系列(七)
|
2天前
|
存储 安全 编译器
go语言编程系列(六)
go语言编程系列(六)
|
2天前
|
自然语言处理 Java 测试技术
go语言编程系列(二)
go语言编程系列(二)
|
2天前
|
编译器 Go
go语言编程系列(三)
go语言编程系列(三)