go并发协程示例

如何用go写并发协程呢?来来来,有代码有真相

package main

import "fmt"
import "time"
import "runtime"
import "sync/atomic"

var runningMultiGoNum int64

func  main() {
	//定时器,防止协程执行超时阻塞进程
	timeOuteRec := 10
	timeout     := time.Millisecond * time.Duration(timeOuteRec)
	tk := time.NewTicker(timeout)
	defer tk.Stop()

	chn := make(chan struct{string})

	go func(ch chan struct{string},txt string) {
		//原子操作
		atomic.AddInt64(&runningMultiGoNum, 1)
		// panic 处理
		if err := recover(); err != nil {
			stack := make([]byte, 8192)
			stack = stack[:runtime.Stack(stack, false)]
			fmt.Printf("multi_call panic:%v\n%s", err, stack)
		}
		atomic.AddInt64(&runningMultiGoNum, -1)
		//todo action
		ch<- struct{ string }{string: txt}
	}(chn,"Hello World")

   for{
	select {
	case s1:= <-chn:
		fmt.Println(s1.string)
	case <-tk.C:
		fmt.Println("exec over")
		return;
	}
   }
}

猜你喜欢

转载自blog.csdn.net/u012460314/article/details/107811356
今日推荐