这是我参与「第五届青训营 」伴学笔记创作活动的第 2天
介绍
- 从工程实践角度,讲授在企业项目实际开发过程中的所遇的难题
1. 语言进阶(并发编程)
- 并发和并行
- 并发:多线程程序在一个核的 CPU 上运行(一段时间看起来是同时运行)
- 主要是通过时间片的切换来实现
- 主要是通过时间片的切换来实现
- 并行:多线程程序在多个核的 cpu 上运行
- 真正的同时运行
- 真正的同时运行
- 并发:多线程程序在一个核的 CPU 上运行(一段时间看起来是同时运行)
- 协程和线程
- 图示
- 协程:用户态,轻量级线程,栈 KB 级别
- 一次可以创建上万协程
- 线程:内核态,线程可以跑多个协程,栈 MB 级别
- 线程的操作都属于比较重的系统操作,会比较消耗资源
- 图示
- Go 提倡通过通信共享内存,而不是通过共享内存实现通信
- 对比图
- Channel
make (chan type,[buffer_size])- 无缓冲通道(同步通道):
make(chan int) - 有缓冲通道:
make(chan int,2)
- 无缓冲通道(同步通道):
- 对比图
2. 依赖管理
- 背景
- 工程项目不可能基于标准库 0~1 编码搭建
- 管理依赖库
- 发展阶段
- 图示
- GOPATH
- 三个文件夹
- bin(项目编译的二进制文件)
- pkg(项目编译的中间产物,加速编译)
- src(项目源码)
- 特点
- 项目代码直接依赖 src 下的代码
- go get 下载最新版本的包到 src 目录下
- 弊端
- 无法实现 package 的多版本控制:A 和 B 依赖于同一个包的不同版本
- 无法实现 package 的多版本控制:A 和 B 依赖于同一个包的不同版本
- 三个文件夹
- Go Vendor
- 特点
- 项目目录下增加 vendor 文件,所有依赖包副本形式放在$ProjectRoot/vendor
- 依赖寻址方式: vendor => GOPATH
- 项目目录下增加 vendor 文件,所有依赖包副本形式放在$ProjectRoot/vendor
- 方式
- 通过每个项目引入一份依赖的副本,解决了多个项目需要同一个 package依赖的冲突问题
- 特点
- 图示