Go语言进阶与依赖管理|青训营笔记

38 阅读2分钟
  • 从多线程程序运行的一个视角来看,并发指的是多线程在一个核 CPU 上的运行,它主要是通过时间片的一个切换来实现同时运行的一个状态,而并行则是直接利用多核实现多线程的同时运行。统一的并发其实可以理解成是系统对外的一种特征或者能力,在实际中其实并行其实可以理解成是实现并发的一个手段。而 Go 语言其实实现了并发性能极高的一个调度模型,然后通过高效的调度,我们可以最大限度的利用计算资源,充分发挥多核计算机的一个优势。
  • 可以说 Go 语言就是为并发而生的。线程其实是系统里比较昂贵的系统资源,它属于内核态,它的创建、切换、停止都属于很重的系统操作,其实它是比较消耗资源的。而协程它是可以理解成是轻量级的线程,用户级的一个线程。协程的创建和调度由 Go 语言本身去完成,也就是它会比线程轻量很多。
  • 共享内存实现的东西必须是通过互斥量对内存进行一个加锁,也就是需要获取一个临界区的一个权限,其实在这种机制下不同的空间就容易发生数据静态的问题,在一定程度上其实会影响程序的性能。Go 最终提倡的是通过通信来共享内存。
  • 在实际开发过程中,另一个重要概念就是依赖管理。
  • Go的依赖管理主要经历了三个阶段,分别是 GoPath, Go Vendor 还有 Go Module,其实到目前为止广泛应用的就是 Go Module。
  • Go Module 是 Go 语言官方推出的一个依赖管理工具,依赖管理系统就是解决了之前依赖管理系统存在的诸如无法依赖同一个库的多个版本的等问题。
  • 依赖分发怎么理解?其实就是表示我们的依赖,是去哪里下载,然后如何去下载的一个问题。比较常见的 GitHub 其实是它是代码托管的一个系统平台,而 Go Module 里面定义的依赖,最终其实都可以对应到代码错误多版本,代码仓库管理系统中的某一个项目的特定提交,或者说版本。这样的话,其实对于 Go Module 中定义的依赖,我们直接可以从对应仓库中下载到指定的软件依赖来完成。