首页 > 编程语言 >golang并发编程-生产者消费者模式

golang并发编程-生产者消费者模式

时间:2023-01-29 10:11:20浏览次数:39  
标签:10 struct randNum 编程 job golang 并发 Job int64

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, 计算时间缩减,效率提高

标签:10,struct,randNum,编程,job,golang,并发,Job,int64
From: https://www.cnblogs.com/liujitao79/p/17071874.html

相关文章

  • 第5章:面向对象编程(中)
    第5章:面向对象编程(中)1、OOP特征二:继承性(inheritance)1.1继承性的作用(好处):(1)减少了代码的冗余,提高了代码的复用性。(2)便于功能的扩展(3)为之后多态性的使用,提供了前提。注:......
  • 读Java8函数式编程笔记04_类库
    1. 默认方法1.1. 接口中定义的包含方法体的方法,方法名有default关键字做前缀1.1.1. 在任何接口中,无论函数接口还是非函数接口,都可以使用该方法1.2. Collection接口......
  • Hugging News #0113:DreamBooth 编程马拉松活动保姆级视频教程来了!
    每一周,我们的同事都会向社区的成员们发布一些关于HuggingFace相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为......
  • Python更适合某些编程需求吗?
    在本文中,我们将讨论Python是否更适合某些编程需求?比如竞争性编码。答案是肯定的;Python更适合编码。它在短时间内用更少的行数编写代码。基于产品的公司需要优秀的编码人......
  • 17种编程语言实现排序算法-选择排序
    开源地址​​https://gitee.com/lblbc/simple-works/tree/master/sort/​​覆盖语言:C、C++、C#、Java、Kotlin、Dart、Go、JavaScript(JS)、TypeScript(TS)、ArkTS、swift......
  • 17种编程语言实现排序算法-冒泡排序
    开源地址​​https://gitee.com/lblbc/simple-works/tree/master/sort​​覆盖语言:C、C++、C#、Java、Kotlin、Dart、Go、JavaScript(JS)、TypeScript(TS)、ArkTS、swift、......
  • 17种编程语言实现排序算法-快速排序
    开源地址​​https://gitee.com/lblbc/simple-works/tree/master/sort/​​覆盖语言:C、C++、C#、Java、Kotlin、Dart、Go、JavaScript(JS)、TypeScript(TS)、ArkTS、swift......
  • 【高并发】AQS中的CountDownLatch、Semaphore与CyclicBarrier用法总结
    CountDownLatch概述同步辅助类,通过它可以阻塞当前线程。也就是说,能够实现一个线程或者多个线程一直等待,直到其他线程执行的操作完成。使用一个给定的计数器进行初始化,该......
  • Linux系统编程-文件IO
    文件IO标准库IO函数和linux系统调用IO函数的区别:标准C库的文件IO函数是跨平台的,在不同的平台上调用不同的系统API标准C库的IO函数有缓冲区,而linux系统调用的没有缓......
  • Go-24 golang命令行初始
    packagemainimport( "flag" "fmt" "os")//golang命令行初识;可以后面多多了解一下强大的命令行工具cobra//cobra工具推荐了解的地址:https://blog.csdn.net/qq......