go并发以及依赖库| 青训营笔记

195 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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的高并发性能原理,以及工程管理中的依赖库详解

引用