k8s常用包

apiserver#RunServer

/Users/davywalker/go/pkg/mod/k8s.io/[email protected]/pkg/server/secure_serving.go:220RunServer

新建一个协程来启动HTTPServer.

Untitled

wait机制

k8s.io/apimachinery/pkg/util/wait

import (
	"context"
	"fmt"
	"k8s.io/apimachinery/pkg/util/wait"
	"math/rand"
	"time"
)

func Wait() {
	ctx, cancel := context.WithCancel(context.Background())
	_ = func() {
		cancel()
	}
	rand.Seed(time.Now().UnixNano())
	wait.UntilWithContext(ctx, doSomething, 1)
}

func doSomething(ctx context.Context) {
	fmt.Println(time.Now(), "doSomething called")
	n := rand.Intn(10000)
	time.Sleep(time.Duration(n) * time.Millisecond)
	fmt.Println(time.Now(), "Hello")
	ctx.Deadline()
}

wait.UntilWithContextwait包中的一个函数,它会按指定的时间间隔(本例中为1纳秒)重复执行doSomething函数,直到上下文ctx被取消。由于间隔设置为1纳秒,实际上操作会持续不断地执行,因为1纳秒是极短的时间。

会在当前主线程中持续不断地执行 doSomething

另外一种方式, 可以直接启动一个routine来不间断地执行:

go wait.UntilWithContext(ctx, doSomething, 0)
time.Sleep(5 * time.Second)

Parallelizer机制