(二)工程实践|高性能|青训营笔记

100 阅读1分钟

2 工程实践

1 高性能

1.1 并发和并行

并发:多线程在一个核的CPU上运行,是表现出来

并行:真正有多核

并行可以理解为实现并发的一个手段

Go实现了一个并发高效调用的模型,

1.2 协程 Goroutine

1.2.1 线程

线程:比较占用系统资源,创建、切换等都需要内核参与

1.2.2 协程

协程:可以简单理解为轻量级的线程,处于用户态,由Go语言进行调度

线程上可以并发多个协程,且占用空间小,线程一次可以创建上万个协程

在函数前加上go关键字,就可以为一个函数创建一个协程。

go func(param type){
	...
}(outer_param)
1.3 协程间通信

通道(Channel):连接协程,遵循先入先出,能保证收发数据的顺序

make(chan type, (size))

没有size参数表示这是一个无缓冲通道(同步通道)

解决同步问题,使用有缓冲区的有缓冲通道,典型生产消费模型

1.3.2 共享内存

互斥量加锁,会影响程序性能

Wait group,相较于之前直接time.Wait更优雅

2 管理依赖

2.1 版本变迁
GOPATH

无法实现package的多版本控制

Go Vendor

增加vendor文件夹,引入依赖副本,优先级高于GOPATH

无法控制依赖版本,更新可能出现依赖冲突

Go Module

定义版本规则和管理项目依赖关系

通过go.mod文件管理依赖包版本

通过go get/go mod指令工具管理依赖包

2.2 go.mod文件分析

单元依赖

indirect

incompatible

多版本依赖选择最低的兼容版本

依赖分发:依赖从哪里下载的问题产生了Proxy