Documentation
¶
Overview ¶
Package goroutine 提供 goroutine ID 读取工具和基于 ants 的协程池封装。
GetGoID 会按当前架构和 Go 版本选择快速路径;在未提供快速路径的平台上会退回到基于 runtime.Stack 的慢速解析实现,调用方也可显式使用 GetGoIDSlow。amd64 构建下, Offset 返回快速路径使用的 runtime.g.goid 字段偏移。NewGoroutinePool 用于创建独立 协程池实例,返回的 cleanup 负责停止指标采集协程并释放底层 ants.Pool 资源;包级 Submit 会惰性创建并复用默认池,在任务 panic 时 recover 并记录日志,不会把 panic 继续向调用方传播。
本包的快速路径依赖 runtime 内部结构、汇编实现和按 Go 版本维护的偏移信息;升级 Go 版本或切换目标架构后需要重新验证对应实现。
Index ¶
- Variables
- func GetGoID() int64
- func GetGoIDSlow() int64
- func Offset() int64
- func Submit(task func()) error
- type GoroutinePool
- type Option
- func WithExpiry(expiry time.Duration) Option
- func WithMaxBlocking(maxBlocking int) Option
- func WithMetrics(metrics bool) Option
- func WithName(name string) Option
- func WithNonBlocking(nonBlocking bool) Option
- func WithPanicHandler(panicHandler func(interface{})) Option
- func WithPreAlloc(preAlloc bool) Option
- func WithSize(size int) Option
Constants ¶
This section is empty.
Variables ¶
var ( // MetricWorkerCurrent 记录协程池的当前状态。 // // 标签: // - name:协程池名称,对应 WithName 配置。 // - state:指标维度,可选值包括: // - cap:协程池容量,对应 GoroutinePool.Cap。 // - running:正在执行任务的 worker 数量,对应 GoroutinePool.Running。 // - free:空闲 worker 数量,对应 GoroutinePool.Free。 // - waiting:等待调度的任务数量,对应 GoroutinePool.Waiting。 MetricWorkerCurrent = prometheus.NewGaugeVec(prometheus.GaugeOpts{ Namespace: namespace, Subsystem: subsystem, Name: "current", Help: "goroutine pool's worker current.", }, []string{"name", "state"}) )
Functions ¶
func GetGoID ¶
func GetGoID() int64
GetGoID 返回当前 goroutine 的 ID。
该快速路径通过 goid_amd64.s 直接读取当前 runtime.g 的 goid 字段。 SAFETY: 此实现依赖 Offset 返回的偏移值与目标 Go 版本的 runtime.g 布局保持一致; 升级 Go 版本后需要同步校验偏移表、汇编代码和配套结构定义。
参数:无。
返回:
- int64:当前 goroutine 的 ID。
func GetGoIDSlow ¶
func GetGoIDSlow() int64
GetGoIDSlow 通过慢速解析路径返回当前 goroutine 的 ID。
该函数始终使用 runtime.Stack 解析首行文本提取 goroutine ID,不依赖架构专用 汇编快速路径,适合在需要显式回退行为时使用。
参数:无。
返回:
- int64:当前 goroutine 的 ID。
Types ¶
type GoroutinePool ¶ added in v0.0.10
type GoroutinePool interface {
// Submit 提交一个任务到协程池中异步执行。
//
// 参数:
// - task:要交给协程池执行的任务函数。
//
// 返回:
// - error:底层协程池关闭或拒绝接收任务时返回错误。
Submit(task func()) error
// Tune 调整协程池的容量。
//
// 参数:
// - size:新的协程池容量。
Tune(size int)
// Cap 返回协程池当前容量。
//
// 参数:无。
//
// 返回:
// - int:协程池当前容量。
Cap() int
// Running 返回当前正在执行任务的 worker 数量。
//
// 参数:无。
//
// 返回:
// - int:当前正在执行任务的 worker 数量。
Running() int
// Free 返回当前空闲的 worker 数量。
//
// 参数:无。
//
// 返回:
// - int:当前空闲的 worker 数量。
Free() int
// Waiting 返回当前等待调度的任务数量。
//
// 参数:无。
//
// 返回:
// - int:当前等待调度的任务数量。
Waiting() int
// IsClosed 报告协程池是否已经关闭。
//
// 参数:无。
//
// 返回:
// - bool:协程池已关闭时返回 true。
IsClosed() bool
}
GoroutinePool 定义协程池的任务提交、容量调整和状态查询能力。
该接口由 NewGoroutinePool 返回的实例实现。
func NewGoroutinePool ¶ added in v0.0.10
func NewGoroutinePool(opts ...Option) (GoroutinePool, func(), error)
NewGoroutinePool 创建一个新的协程池实例。
参数:
- opts:可选配置项,按传入顺序覆盖默认配置。
返回:
- GoroutinePool:创建成功的协程池实例。
- func():cleanup 函数;调用方在不再使用该实例时应调用一次,用于停止指标采集协程并释放底层 ants.Pool 资源。
- error:底层 ants.NewPool 创建失败时返回错误;此时协程池实例和 cleanup 都为 nil。
type Option ¶ added in v0.0.10
type Option func(p *goroutinePool)
Option 定义协程池配置修改函数。
参数:
- p:待修改的协程池配置实例。
func WithExpiry ¶ added in v0.0.10
WithExpiry 设置空闲 worker 的回收周期。
参数:
- expiry:空闲 worker 在底层池中保留的最长空闲时间。
返回:
- Option:用于更新 worker 回收周期的选项函数。
func WithMaxBlocking ¶ added in v0.0.10
WithMaxBlocking 设置阻塞提交模式下允许等待的最大任务数。
参数:
- maxBlocking:传给 ants.WithMaxBlockingTasks 的最大等待任务数。
返回:
- Option:用于更新最大阻塞任务数的选项函数。
func WithMetrics ¶ added in v0.0.10
WithMetrics 设置是否启用指标采集。
参数:
- metrics:为 true 时启动后台采集协程并持续更新 MetricWorkerCurrent。
返回:
- Option:用于更新指标采集开关的选项函数。
func WithName ¶ added in v0.0.10
WithName 设置协程池实例名称。
参数:
- name:写入指标标签的协程池名称;为空时指标使用空名称标签。
返回:
- Option:用于更新协程池名称的选项函数。
func WithNonBlocking ¶ added in v0.0.10
WithNonBlocking 设置是否启用非阻塞提交模式。
参数:
- nonBlocking:为 true 时在池满后立即返回提交错误,而不是等待空闲 worker。
返回:
- Option:用于更新提交阻塞策略的选项函数。
func WithPanicHandler ¶ added in v0.0.10
func WithPanicHandler(panicHandler func(interface{})) Option
WithPanicHandler 设置底层协程池的 panic 回调。
参数:
- panicHandler:传给 ants.WithPanicHandler 的回调函数,用于处理 worker 执行任务时发生的 panic。
返回:
- Option:用于更新 panic 回调的选项函数。
func WithPreAlloc ¶ added in v0.0.10
WithPreAlloc 设置是否在初始化时预分配 worker。
参数:
- preAlloc:为 true 时在创建协程池时预分配 worker。
返回:
- Option:用于更新预分配策略的选项函数。