From 5e1006067054dd2be8ede1972e416d4d27f0c8f0 Mon Sep 17 00:00:00 2001 From: Marcus Schiesser <mail@marcusschiesser.de> Date: Sat, 29 May 2021 14:56:01 +0800 Subject: [PATCH] let one consumer (or producer) handle multiple messages --- src/gofabric/main.go | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/gofabric/main.go b/src/gofabric/main.go index 4d95bda..58dc6ba 100644 --- a/src/gofabric/main.go +++ b/src/gofabric/main.go @@ -6,8 +6,9 @@ import ( ) const ( - PRODUCERS = 10 - CONSUMERS = 10 + MESSAGES = 10 + PRODUCERS = 3 + CONSUMERS = 5 ) var ( @@ -17,33 +18,40 @@ var ( func main() { ch = make(chan string) - for i := 1; i < PRODUCERS; i++ { - createProducer(i) + for i := 1; i <= PRODUCERS; i++ { + createProducer(i, MESSAGES/PRODUCERS) } - for i := 1; i < CONSUMERS; i++ { - createConsumer(i) + createProducer(0, MESSAGES%PRODUCERS) + for i := 1; i <= CONSUMERS; i++ { + createConsumer(i, MESSAGES/CONSUMERS) } + createProducer(0, MESSAGES%CONSUMERS) // wait for producer and consumers wg.Wait() fmt.Println("Consumers and producers are finished.") } -func createConsumer(i int) { +func createConsumer(i, messages int) { fmt.Printf("Starting consumer %d\n", i) wg.Add(1) go func() { defer wg.Done() - msg := <-ch - fmt.Printf("Consumer %d received message: %v\n", i, msg) + for m := 1; m <= messages; m++ { + msg := <-ch + fmt.Printf("Consumer %d received message: %v\n", i, msg) + } + fmt.Printf("Consumer %d done\n", i) }() } -func createProducer(i int) { +func createProducer(i, messages int) { fmt.Printf("Starting producer %d\n", i) wg.Add(1) go func() { defer wg.Done() - ch <- fmt.Sprintf("Hi from producer %d", i) + for m := 1; m <= messages; m++ { + ch <- fmt.Sprintf("Msg %d from producer %d", m, i) + } fmt.Printf("Producer %d done\n", i) }() } -- GitLab