Go: 协程的生命周期管理

协程的生命周期:

1. 定义:

协程的创建等全部生命历程的管理。通俗的讲就是“保姆”。

它的作用是便于协程的回收利用。

goroutine申请的代价很小,但是在go程序中,goroutine的总量是有上限,超过上限,多余出来的协程就得等到前面的协程完成任务后能开始运行。所以适时的进行回收。

2. 生命周期分类:

  • 协程创建
  • 协程回收: 由Go语言的GC和垃圾回收机制控制的
  • 协程中断: 通过context包实现

3. 如何实现:

  • context实现中断

 

package main

import (
	"context"
	"fmt"
	"sync"
)

func main() {
	// 初始化一个context
	parent := context.Background()
	// 生成一个可取消的context(还有超时取消,超时取消用的比较少)
	ctx, cancel := context.WithCancel(parent)
	runTimes := 0
	var wg sync.WaitGroup
	wg.Add(1)
	go func(ctx context.Context) {
		for {
			select {
			case <- ctx.Done():
				fmt.Println("Goroutine Done!")
				return
			default:
				fmt.Printf("Goroutine Running... Times: %d\n", runTimes)
				runTimes = runTimes + 1
			}
			if runTimes > 5 {
				cancel()// 超过5次就取消
				wg.Done()
			}

		}
	}(ctx)
	wg.Wait()
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章