生产者与消费者

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产者与消费者相关的知识,希望对你有一定的参考价值。

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "gitee.com/ha666/golibs"
 6     "github.com/astaxie/beego/logs"
 7     _ "ha666/initial"
 8     "math"
 9     "time"
10 )
11 
12 func main() {
13     ch := make(chan int, 100000)
14     defer close(ch)
15     for i := 1; i < 3; i++ {
16         go producer(fmt.Sprintf("生产者%d", i), i, ch)
17     }
18 
19     time.Sleep(1 * time.Second)
20 
21     for i := 1; i < 5; i++ {
22         go consumer(fmt.Sprintf("消费者%d", i), i, ch)
23     }
24     time.Sleep(math.MaxInt64)
25 }
26 
27 func producer(pname string, t_id int, ch chan int) {
28     for i := 1; ; i++ {
29         if len(ch) > 300 {
30             fmt.Println(golibs.StandardTime(), "暂停生产10秒")
31             time.Sleep(time.Second * 10)
32             continue
33         }
34         time.Sleep(time.Duration(3) * time.Millisecond)
35         fmt.Println(golibs.StandardTime(), pname, " : ", i)
36         ch <- i
37         lch := len(ch)
38         if lch >= 300 {
39             logs.Info("【生产】队列中已经有%d个,暂停10秒", lch)
40             time.Sleep(time.Second * 10)
41         }
42     }
43 }
44 
45 func consumer(uname string, t_id int, ch chan int) {
46     count := 0
47     t1 := time.Now()
48     b := 0
49     for i := range ch {
50         b, i = i, b
51         time.Sleep(time.Duration(t_id) * time.Millisecond)
52         count++
53         if count >= 1000 {
54             t2 := golibs.Since(t1)
55             logs.Info("【消费】%s共执行%d项,耗时:%d毫秒", uname, count, t2)
56             count = 0
57             t1 = time.Now()
58         }
59     }
60 }

 

以上是关于生产者与消费者的主要内容,如果未能解决你的问题,请参考以下文章

请问如何用C语言实现“生产者与消费者问题”?(最好附上完整的C语言源代码)

JAVA模拟生产者与消费者实例

java面试笔试题代码,先收藏了

生产者与消费者案例-虚假唤醒

使用java代码连接不上kafka的解决方案(生产者与消费者都没能连上)

浅谈Java简单实现的生产者与消费者问题