后端青训营02:课程笔记

51 阅读2分钟

并发与并行的区别? 并发:多线程程序在一个核的CPU运行,利用时间片的切换来实现

image.png 并行:多线程程序在多个cpu上运行

image.png

Go语言为并发而生:协程

image.png 协程:用户态,轻量级线程,栈MB级别
线程:内核态,线程跑多个协程,栈KB级别

协程之间的通信 Go提倡通过通信来共享内存,而不是通过共享内存来通信;因为后者需要加互斥锁,会影响性能 image.png

WaitGroup 实现并发协程的同步:开启协程+1;执行结束-1;主线程阻塞直到计数器为0;类似于Java的countdowlunch

Go Path与Go Module的区别(来源于网络资源) GOPATH 模式下没有版本控制的概念,具有致命的缺陷,至少会造成以下问题:

  • 在执行go get的时候,你无法传达任何的版本信息的期望,也就是说你也无法知道自己当前更新的是哪一个版本,也无法通过指定来拉取自己所期望的具体版本。
  • 在运行 Go 应用程序的时候,你无法保证其它人与你所期望依赖的第三方库是相同的版本,也就是说在项目依赖库的管理上,你无法保证所有人的依赖版本都一致。
  • 你没办法处理 v1、v2、v3 等等不同版本的引用问题,因为 GOPATH 模式下的导入路径都是一样的,都是github.com/foo/bar。 由此,Go Module有了产生和发展的必要;- module:用于定义当前项目的模块路径。
    Go Module文件下内容:
  • go:用于标识当前模块的 Go 语言版本,值为初始化模块时的版本,目前来看还只是个标识作用。
  • require:用于设置一个特定的模块版本。
  • exclude:用于从使用中排除一个特定的模块版本。
  • replace:用于将一个模块版本替换为另外一个模块版本。