这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
引言
还是用熟悉的知识去理解陌生的知识,这样学的又快又熟练,例如目前我们用java的语言知识体系来理解go语言的知识,以下我分为二大板块一个板块是go的并发为什么go可以高并发的时候性能比其他的语言优势更大,其次另一个板块就是go的依赖库理解,我是学java的所以依然可以用java的maven框架去理解其中的深层含义
go并发
首先我们来理解go并发,并行,协程等概念。
并发
广义的并发指并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并行
这里我不得不说go语言就是为处理高并发而诞生的,为什么这么说呢,是因为go语言他可以多核的处理不同的程序来实现高效率的处理。
协程
这里的协程可以和线程作比较, 协程:用户态轻量级线程栈MB级别,比线程更小,处理cpu更加的快捷和灵活,协程(coroutine)也是一种程序组件。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程源自 Simula 和 Modula-2 语言,但也有其他语言支持。 下面用代码演示以下如何用go开启一个协程
func hello(i int){
println("hello goroutine"+fmt.Sprint(i))
}
func HelloGoRoutine(){
for i := 0; i < 5; i++ {
go func (j int) {
hello(j)
}(i)
}
time.Sleep(time.Second)
}
csp
通过通信共享内存而不是通过内存共享同行,这样更加的高效率 如图演示生产和消费者之间的关系,其次消费者那里要曾经缓冲,避免生产者不能即使的满足消费者如图所示
并发安全lock
可以用java锁去理解
工程依赖
这个工程依赖就非常类似于我们java框架中的maven了,可以去这样理解他的依赖库,这里分成三个部分第一个部分GOPath,GO vendor,Go Module
GOPath
GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。
工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面、计算机及椅子就是你的工作区。工作区的概念与工作目录的概念也是类似的。如果不使用工作目录的概念,在多人开发时,每个人有一套自己的目录结构,读取配置文件的位置不统一,输出的二进制运行文件也不统一,这样会导致开发的标准不统一,影响开发效率。
GOVender
govender 是对Golang的包依赖管理的一个插件,该工具将项目依赖的外部包拷贝到项目下的 vendor 目录下,并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。 优点:可以多个继承了,缺点不能兼容所以就有了
GOModule
Go modules 是 Go 语言中正式官宣的项目依赖解决方案,Go modules(前身为vgo)于 Go1.11 正式发布,在 Go1.14 已经准备好,并且可以用在生产上(ready for production)了,Go 官方也鼓励所有用户从其他依赖项管理工具迁移到 Go modules。
个人总结
此次学习的知识点比较少,今天确实太忙碌啦,但是仔细的学习了go的高并发性能原理,以及工程管理中的依赖库详解