这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、本堂课重点内容:
- 语言进阶,从并发的角度了解go
- 依赖管理,了解go语言依赖管理的演进路线
- 测试,提升大家的质量意识
- 项目实战,感受真实的项目开发
二、详细知识点介绍:
1.0并发vs并行
并发:多线程程序在一个核的cpu上运行
并行:多线程程序在多个核的cpu上运行
go语言可以充分发挥多核优势,高效运行,可以说go语言就是为并发而生的
1.1Goroutine(协程)
首先了解进程和线程
进程:程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位
线程:是进程的一个执行实例,是程序执行的最小单位
而协程是轻量级线程,并且独立栈空间,共享程序堆空间,调度由用户控制
在go中用go关键字来开启一个协程
1.2CSP (Communicating Sequential Processes)
go实现了两种并发形式
- 多线程共享内存
- CSP并发模型
go语言提倡通过通信共享内存而不是共享内存实现通信
第一种会比较影响程序性能
“不要以共享内存的方式来通信,相反,要通过通信来共享内存。”
1.3channel
使用make(chan 元素类型,[缓冲大小])来新建一个channel
无缓冲通道也被称为同步通道
示例代码(打印0到9的平法数)
func CalSquare() {
src := make(chan int)
dest := make(chan int, 3) //生产速度比消费速度快
go func() { //生产
defer close(src)
for i := 0; i < 10; i++ {
src <- i
}
}()
go func() { //消费
defer close(dest)
for i := range src {
dest <- i * i
}
}()
for i := range dest {
println(i)
}
}
1.4并发安全Lock
即共享内存的方法通信 会存在多个协程同时操作一个通道,发生数据竞态的情况
2.0依赖管理
工程不可能基于标准库代码搭建
三、课后个人总结:
本次课程有很多的新知识,知识量大,还是很有难度的。
本节课知识也没消化完,在之后的日子还要回看补充。
四、引用参考:
第五届字节跳动青训营 Go语言进阶-工程进阶