Go语言进阶-工程进阶 | 青训营笔记

98 阅读2分钟

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

一、本堂课重点内容:

  • 语言进阶,从并发的角度了解go
  • 依赖管理,了解go语言依赖管理的演进路线
  • 测试,提升大家的质量意识
  • 项目实战,感受真实的项目开发

二、详细知识点介绍:

1.0并发vs并行

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

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

go语言可以充分发挥多核优势,高效运行,可以说go语言就是为并发而生的

1.1Goroutine(协程)

首先了解进程和线程

进程:程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位

线程:是进程的一个执行实例,是程序执行的最小单位

而协程是轻量级线程,并且独立栈空间,共享程序堆空间,调度由用户控制

在go中用go关键字来开启一个协程

1.2CSP (Communicating Sequential Processes)

go实现了两种并发形式

  1. 多线程共享内存
  2. CSP并发模型

go语言提倡通过通信共享内存而不是共享内存实现通信

第一种会比较影响程序性能

“不要以共享内存的方式来通信,相反,要通过通信来共享内存。”

1.3channel

使用make(chan 元素类型,[缓冲大小])来新建一个channel

image.png

无缓冲通道也被称为同步通道

示例代码(打印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语言进阶-工程进阶