涛子 - 简单就是美

成单纯魁增,永继振国兴,克复宗清政,广开家必升

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  428 随笔 :: 0 文章 :: 19 评论 :: 22万 阅读

https://blog.csdn.net/qq_55752792/article/details/125917846

package main

import (
    "fmt"
    "math/rand"
    "sync"
    "time"
)

// Job struct
type Job struct {
    ID      int64
    RandNum int64
}

// Result struct
type Result struct {
    job   Job
    Total int64
}

var jobChan = make(chan Job, 10)
var resultChan = make(chan Result, 10)

// worker
func worker(wg *sync.WaitGroup) {
    for job := range jobChan {
        total := int64(0)
        randNum := job.RandNum
        for randNum != 0 {
            total += randNum % 10
            randNum /= 10
        }

        time.Sleep(1 * time.Second)

        resultChan <- Result{job, total}
    }

    wg.Done()
}

// worker pool
func createWorkerPool(n int64) {
    var wgPool sync.WaitGroup

    for i := int64(0); i < n; i++ {
        wgPool.Add(1)
        go worker(&wgPool)
    }

    wgPool.Wait()
    close(resultChan)
}

// create job
func createJob(n int64) {
    for i := int64(0); i < n; i++ {

        jobChan <- Job{i, rand.Int63n(999)}
    }
    close(jobChan)
}

// get result
func getResult() {
    for r := range resultChan {
        fmt.Println(r.job.ID, r.job.RandNum, r.Total)
    }
}

func main() {
    start := time.Now()

    go createJob(1000)
    go getResult()
    createWorkerPool(50)

    end := time.Now()

    fmt.Println("start: ", start, ", end: ", end, ", total: ", end.Sub(start))
}

createWorkerPool 由10 增加至 50, 计算时间缩减,效率提高

posted on   北京涛子  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示