Go进阶:并发、项目管理 | 青训营笔记

63 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

前言

在学习完基础的语法内容后,接着就要继续学习进阶内容,进阶内容大多基础,但也有许多的新概念、新知识

并发与并行的区别

并发:多线程程序在一个核的CPU上运行

并行:多线程程序在多个核的CPU上运行

image.png

Go可以充分发挥多核优势 高效运行

协程Goroutine

image.png

协程,英文Coroutines,是一种比线程更加轻量级的存在。 正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。协程与线程主要区别是它将不再被内核调度,而是交给了程序自己而线程是将自己交给内核调度,所以也不难理解golang中调度器的存在。

image.png

进程、线程和协程的区别www.cnblogs.com/sunlong88/p…

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 缓存

原文链接:blog.csdn.net/weixin_4352…