Go语言工程实践1+2|青训营笔记

83 阅读2分钟

1并发与并行

多线程在多核CPU可以实现同时执行,也即并行; 多线程在一个CPU上,在同一段时间里可以实现并发执行。Go语言可以发挥其优势,实现高并发。 接下来有一个协程的概念。 image.png 如图所示,协程在用户态,线程在核心态,协程是轻量级线程,是栈KB级别,线程可以跑多个协程,是栈MB级别。

协程与协程是通过通道channel通信的,需要注意的是:最好是通过通信来共享内存,而不是通过共享内存的方式来通信。同时通道可以分为有缓冲的和无缓冲的,无缓冲则只能等生产者写入通道数据,消费者才能拿数据;而如果缓冲区容量大于等于2,则当缓冲区有数据但没有填满时,可以一边写数据,一边读数据。

image.png 同时在协程并发过程,需要注意对临界区的互斥访问,这就涉及到了锁这种结构。另外可以用waitgroup实现协程间的同步与阻塞。

image.png

2依赖管理

依赖管理有三个阶段。

2.1GoPath

在目录下分为src:存放Go项目源码,pkg:是用来存放编译的中间产物的,能加快编译速度,bin:存放编译后的二进制文件。GoPath有着明显的缺点,就是不同的程序如果是依赖一个包的不同版本,在GoPath中就无法使它们都能运行起来。

2.2Go Vendor

Vendor中存放项目依赖的副本,但它无法控制依赖的版本。

2.3Go Module

go.mod:配置文件,描述依赖关系
proxy:中心仓库管理依赖库
本地工具:go get/mod
在学习这一模块,可以类比Java中的maven管理工具。

以上 未完待续......