• 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))
    
    }
    
  • 相关阅读:
    python主要探索函数
    数据分析分析方法
    监控hadoop任务结果shell脚本
    shell编程
    hadoop介绍
    数据探索
    Python数据分析简介
    数据挖掘基础篇之整体思路
    sqlAlchemy
    python md5 加密
  • 原文地址:https://www.cnblogs.com/standby/p/13073876.html
Copyright © 2020-2023  润新知