go Context
1. Context 概述
所谓上下文指的是在 API 之间或者方法调用之间,所传递的除了业务参数之外的额外信息,比如服务追踪。Go 标准库中的 Context 不仅仅传递上下文信息还提供了超时(Timeout)和取消(Cancel)的机制。
所谓上下文指的是在 API 之间或者方法调用之间,所传递的除了业务参数之外的额外信息,比如服务追踪。Go 标准库中的 Context 不仅仅传递上下文信息还提供了超时(Timeout)和取消(Cancel)的机制。
Go 是一个自动垃圾回收的编程语言,采用三色并发标记算法标记对象并回收。但是,如果你想使用 Go 开发一个高性能的应用程序的话,就必须考虑垃圾回收给性能带来的影响。对象池化, 可以有效地减少新对象的创建次数,是性能优化的重要方式。
线程安全的 map
Go 内建的 map 类型如下:
|
|
其中,key 类型的 K 必须是可比较的(comparable),在 Go 语言中,bool、整数、浮点数、复数、字符串、指针、Channel、接口都是可比较的,包含可比较元素的 struct 和数组,这俩也是可比较的,而 slice、map、函数值都是不可比较的。通常情况下,我们会选择内建的基本类型,比如整数、字符串做 key 的类型,因为这样最方便。
Once 有且仅有一次执行
Once 可以用来执行且仅仅执行一次动作:Once 常常用来初始化单例资源,或者并发访问只需初始化一次的共享资源,或者在测试的时候初始化一次测试资源。
Cond 条件变量
Go 标准库提供 Cond 原语的目的是,为等待 / 通知场景下的并发问题提供支持。Cond 通常应用于等待某个条件的一组 goroutine,等条件变为 true 的时候,其中一个 goroutine 或者所有的 goroutine 都会被唤醒执行。顾名思义,Cond 是和某个条件相关:
WaitGroup 任务编排
WaitGroup 很简单,就是 package sync 用来做任务编排的一个并发原语。它要解决的就是并发 - 等待的问题: goroutine A 等待一组 goroutine 全部完成。
很多操作系统和编程语言都提供了类似的并发原语。比如,Linux 中的 barrier、Pthread(POSIX 线程)中的 barrier、C++ 中的 std::barrier、Java 中的 CyclicBarrier 和 CountDownLatch 等。