4.Go语言高并发与微服务实战
第 4 章 进阶——Go 语言高级特性
Go语音是一门静态强类型的语言,在程序编译的过程中会把变量的反射信息如字段类型、类型信息等写到可执行文件中。在程序执行过程中,
Go语音虚拟机加载可执行文件中变量的反射信息,并提供接口用于在运行时获取和修改代码的能力。
Go语音支持两种并发模型,一种是我们常见的共享内存并发模型;另一种是基于Go语音推荐的CSP(顺序通信进程)并发模型。Go语音使用了一种
特殊的MPG线程模型,使得可以原生支持协程并发,大大提供了程序的执行效率。
4.1 依赖管理
4.1.1 包管理
4.1.2 GOPATH
4.1.3 Go Modules
4.2 反射基础
4.2.1 reflect.Type 类型对象
4.2.2 类型对象 reflect.StructField 和 reflect.Method
4.2.3 reflect.Value 反射值对象
【实例 4-1】使用反射调用接口方法
4.3 并发模型
4.3.1 并发与并行
并发不要求cpu具备多核计算的能力。
并行程序则要求cpu提供多核并行计算的能力。
并发程序的执行通常是不确定的,这种不确定来源于资源之间的互相依赖和竞态条件,这可能导致执行线程之间的互相等待,使得并发程序即使
在多核环境上也无法做到真正并行执行而降级为串行执行。
并行程序的每个执行模块在逻辑上是独立的,即线程执行时可以独立完成任务,从而可以做到同一时刻多个指令能够同时执行。
4.3.2 CSP 并发模型
Go语音实现了两种并发模型:
1.我们熟悉的线程与锁并发模型,它主要是依赖于共享内存实现。线程与锁模型类似于对底层硬件运行过程的形式化,程序的正确运行很大
程度上依赖于开发人员的能力和技巧,程序在出错时不易排查。
2.Go语音中提倡使用的CSP通信顺序进程模型。
CSP模型中存在两个关键的概念:
1.并发实体