这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
前言
在学习完基础的语法内容后,接着就要继续学习进阶内容,进阶内容大多基础,但也有许多的新概念、新知识
并发与并行的区别
并发:多线程程序在一个核的CPU上运行
并行:多线程程序在多个核的CPU上运行
Go可以充分发挥多核优势 高效运行
协程Goroutine
协程,英文Coroutines,是一种比线程更加轻量级的存在。 正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。协程与线程主要区别是它将不再被内核调度,而是交给了程序自己而线程是将自己交给内核调度,所以也不难理解golang中调度器的存在。
CSP(communicating sequential processes)
主要讲一个倡导通过通信来共享内存
锁相关差不多 一个互斥锁(悲观) 一个可重入锁
项目管理
Go依赖管理经历了3个阶段:早期GOPATH、中期Go Vendor、 最新Go Module
依赖管理三要素
- 配置文件 go.mod 可以对比看java的maven的pom文件?
- 中心管理依赖库 对比maven
- 本地工具 go get、go mod 对比maven
go mod init <project_name> : 初始化一个 Module
go mod download:下载项目依赖的 modules 到本地 Cache
go mod edit:编辑 go.mod 文件,选项有 -json、-require 和 -exclude
go mod graph:以文本模式打印模块需求图
go mod tidy: 删除错误或者不使用的 Modules
go mod vendor:生成 Vendor 目录
go mod verify:验证依赖是否正确
go mod why:查找依赖
go clean -modcache:清理 Modules 缓存