run

A universal mechanism to manage goroutine lifecycles

  • 所有者: oklog/run
  • 平台:
  • 许可证: Apache License 2.0
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

run

GoDoc
Build Status
Go Report Card
Apache 2 licensed

run.Group is a universal mechanism to manage goroutine lifecycles.

Create a zero-value run.Group, and then add actors to it. Actors are defined as
a pair of functions: an execute function, which should run synchronously;
and an interrupt function, which, when invoked, should cause the execute
function to return. Finally, invoke Run, which concurrently runs all of the
actors, waits until the first actor exits, invokes the interrupt functions, and
finally returns control to the caller only once all actors have returned. This
general-purpose API allows callers to model pretty much any runnable task, and
achieve well-defined lifecycle semantics for the group.

run.Group was written to manage component lifecycles in func main for
OK Log.
But it's useful in any circumstance where you need to orchestrate multiple
goroutines as a unit whole.
Click here to see a
video of a talk where run.Group is described.

Examples

context.Context

ctx, cancel := context.WithCancel(context.Background())
g.Add(func() error {
	return myProcess(ctx, ...)
}, func(error) {
	cancel()
})

net.Listener

ln, _ := net.Listen("tcp", ":8080")
g.Add(func() error {
	return http.Serve(ln, nil)
}, func(error) {
	ln.Close()
})

io.ReadCloser

var conn io.ReadCloser = ...
g.Add(func() error {
	s := bufio.NewScanner(conn)
	for s.Scan() {
		println(s.Text())
	}
	return s.Err()
}, func(error) {
	conn.Close()
})

Comparisons

Package run is somewhat similar to package
errgroup,
except it doesn't require actor goroutines to understand context semantics.

It's somewhat similar to package
tomb.v1 or
tomb.v2,
except it has a much smaller API surface, delegating e.g. staged shutdown of
goroutines to the caller.

主要指标

概览
名称与所有者oklog/run
主编程语言Go
编程语言Go (语言数: 1)
平台
许可证Apache License 2.0
所有者活动
创建于2017-11-13 21:30:14
推送于2025-06-27 14:04:45
最后一次提交
发布数3
最新版本名称v1.2.0 (发布于 )
第一版名称v1.0.0 (发布于 )
用户参与
星数1.6k
关注者数31
派生数89
提交数15
已启用问题?
问题数16
打开的问题数0
拉请求数9
打开的拉请求数0
关闭的拉请求数13
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?