并发和并行+测试|青训营笔记

101 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

并发和并行

多线程的角度: 并发指的是多线程程序在一个核运行 并行 多线程程序在多核的cpu上进行运行 go 可以充分发挥多核优势 实现并发:

协程和线程:

协程:用户态 轻量级

线程:内核态 可以跑多个协程

开启一个协程: 在函数前面加一个go关键字 为函数创建协程

快速打印:

截屏2022-05-08 21.09.09.png

协程之间通信 :提倡通过通信共享内存 不是通过共享内存而实现通县

通过通道:

通道是个引用类型: make(chan 元素类型, 缓冲大小)

无缓冲通道是一个同步通道

例子是 A 子协程 发送0-9 数字

B 计算输入数字的平方

在make chan 时 将b协程chan 做一个有缓冲的通道:考虑 b(消费者)的效率可能比a (生产)慢

建立有缓冲的通道使得消费者不会影响生产者的生产效率

带缓冲的通道可以均衡生产和消费不平衡的效率问题

测试

单元测试:输入 测试单元 输出 校对

通过输出和期望值校对 保证质量和提升效率

回归测试

集成测试:集成功能

单元测试: 开发者对功能模块测试

所有的测试文件都以_test.go 结尾

命名规则 fun TesXxx(*testing.T )

初始化逻辑放到testMain 中 :

 fun TestMain(m * testing.M){
//测试前: 数据装载 配置初始化等前置工作
code:=m.Run()
//测试吼:释放资源等收尾工作
os.Exit(code)}

衡量代码是否通过了足够的测试:go test — cover