zoukankan      html  css  js  c++  java
  • golang多协程并发工作示例

    golang多协程并发工作

    package main
    
    import (
    	"fmt"
    	"log"
    	"os"
    	"sync"
    	"time"
    )
    
    type Task struct {
    	Name string
    	Age  int
    }
    
    func work(wg *sync.WaitGroup, jobs chan Task, w int, logger *log.Logger) {
    	defer wg.Done()
    	for true {
    		job, ok := <-jobs
    		if !ok {
    			break
    		}
    		logger.Printf("[%d]name=%s age=%d
    ", w, job.Name, job.Age)
    	}
    }
    
    func main() {
    
    	start := time.Now()
    	file, err := os.OpenFile("info.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
    	if err != nil {
    		panic(err)
    	}
    	defer file.Close()
    	gLogger := log.New(file, "", log.Ldate|log.Ltime|log.Lshortfile)
    	gLogger.Println("[main] ready go")
    
    	wg := &sync.WaitGroup{}
    	jobs := make(chan Task)
    
    	workers := 10
    	for w := 0; w < workers; w++ {
    		wg.Add(1)
    		go work(wg, jobs, w, gLogger)
    	}
    
    	for i := 0; i < 10000; i++ {
    		task := Task{
    			Name: fmt.Sprintf("Name-%d", i),
    			Age:  i,
    		}
    		jobs <- task
    	}
    	close(jobs)
    	wg.Wait()
    
    	gLogger.Printf("[main] done, cost: %s", time.Now().Sub(start))
    
    }
    
  • 相关阅读:
    CF601C Kleof&#225;š and the n-thlon 题解
    CSP-J2 2020 T3,T4 题解
    题解:Luogu P2051 [AHOI2009]中国象棋
    三角函数
    Luogu P1904 天际线
    计算几何初步
    C++STL(set……)
    斜率优化DP
    欧拉图、哈密顿图
    初赛—错题集
  • 原文地址:https://www.cnblogs.com/standby/p/13073876.html
Copyright © 2011-2022 走看看