今天学习的是Go语言的工程实践 首先,Go语言相比其他语言来说是高性能的。
goroutine 是 Go 语言中的一个重要特性。可以简单理解为类似线程的轻量级进程。
goroutine 比线程更省资源,调度速度更快。Go 语言运行时可以启动和管理很多 goroutine。 goroutine 非常高效而且易用,只需利用 go keyword 即可启动一个 goroutine。 goroutine 之间通过 channel 进行通信协作。
CSP
- 传统线程同步是通过共享状态来实现的:线程竞争共享的内存资源。
- CSP 模型通过互斥通信来实现:每个进程有自己的内存,通过通信来交换信息。
提倡通过通信共享内存而不是通过共享内存而实现通信
Channel
channel是Go语言中用来实现线程通信的机制。Channel是一个导送器,可以用来传递信息和同步线程。
Sync
Go语言中的并发主要分为两种:
- goroutine + channel :这是Go语言特有的CSP(Communicating Sequential Processes)并发模型。使用较为简单高效。
- 传统同步 : 使用sync包中的原生同步方法,如Mutex(互斥锁)、 RWMutex(读写锁)、Once(单例初始化)、WaitGroup(同步等待组)等。
这两种方法各有优势:
- goroutine + channel :代码结构清晰,效率高。
- 传统同步:用于处理共享内存的场景,提供更多操作粒度。
依赖
不管什么语言开发项目,都需要用到依赖,都要去依赖一些包。 Go语言依赖管理主要通过go mod(Go Modules)来实现。
Go Modules有以下优点:
- 依赖版本管理: 依赖包的版本控制在go.mod文件中,方便管理和回滚。
- 可复制依赖: 依赖包会被复制到项目本地,不需要依赖网络。
- 跨平台: 可支持不同OS上的依赖管理。