并发、测试课程笔记 | 青训营笔记

78 阅读2分钟

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

对自己第三届青训营的文章简单修改后,关于并发、测试等要点的笔记

并发

并发和并行

  • 并发:在一个核的CPU中运行
  • 并行:在多个核的CPU中运行

协程和线程

  • 协程:用户态轻量级线程,KB级别
  • 线程:内核态,可跑多个的协程,MB级别

协程的通信

channel(是否同步->消费和生产的效率不等)

image-20220508152652788

Lock(并发安全)

sync包下的Mutex,加锁保证并发安全

WaitGroup

方法:

image-20220508152957961

结构:

image-20220508153020254

测试

单元测试

  • 规则

  • assert(例子:assert.Equal()方法,快速比较判断测试结果)

  • 覆盖率(image-20220508153706611)<==="--cover"

  • 依赖((mock机制)幂等、稳定==》打桩) 幂等:每一次测试运行都应该产生与之前一样的结果

    Mockey Patch的作用域在Runtime,在运行时通过通过Go的unsafe包,将内存中函数的地址替换为运行时函数的地址。将待打桩函数或方法的实现跳转。

基准测试

测试程序运行的性能和CPU的损耗 ps:执行rand要消耗的时间比较长,因为rand为了保证全局的随机性和并发安全,持有了一把全局锁,因此推荐使用一种高性能随机数方法fastrand,牺牲了一定的数列一致性。

补充

登录两种形式区别

一、Cookie和Session

和端上进行交互的话一般是使用这种方式鉴权。

二、JWT+Token

不需要依赖一些存储,一般是后端直接解密。 一般在于服务器、http进行交互的话,使用JWT+token

消息队列应用场景

解决的问题主要都是隔离作用

使用场景:两种方法,如果是强依赖,就无法通过这种方式进行实现 如果是非强依赖,方法A是发布一个消息、事件,方法B是接收并消费这个事件去做异步的处理,这样的情况下使用消息队列,就能起到解耦的功能