Concurrency helpers for dealing with arbitrary numbers of channels and goroutines.
//Start a new Multi Stream with 30 goroutines; 10 producers, 10 processors, and 10 consumers
//Have the producer goroutines multiplex their sends across 5 channels with a buffer size of two
New_Stream(10, 10, 10).Produce(5, 2, func(prod_idx int, chans *Send_Set) {
//Each producer sends "Hello" 5 times
for i := 0; i < 5; i++ {
chans.Send("Hello")
}
//Have the processer goroutines multiplex their sends across 5 channels with a buffer size of two
}).Process(5, 2, func(data interface{}, chans *Send_Set) {
//Each processer sends "Hello World!"
chans.send(fmt.Sprintf("%s World!", data)
//Start consumers and block this goroutine until they finish
}).Consume_And_Wait(func(data interface{}) {
//Print "Hello World!"
msg := data.(string)
fmt.Println(msg)
})
//"Hello World!" has been printed 50x by this point
fmt.Println("All Producer, Processer, and Consumer goroutines done.")