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?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?