func Prod2Demux1Cons1(cf conf) {
	p := NewProducer2(cf.nSel, cf.pEvery, cf.pBurstEvery, cf.pBurstSz)
	d := NewDemux1(cf.nSel, p.Out, cf.dBuffer)
	c := make([]*Consumer1, cf.nSel)
	for i := 0; i < cf.nSel; i++ {
		c[i] = NewConsumer1(i, d.Out[i], cf.cDelay)
	}
	<-time.After(cf.runfor)
	npro := p.Stop()
	ndem := d.Wait()
	log.Println("Generated", npro, "packets")
	log.Println("Demux1 received", ndem, "packets")
	for i := range c {
		ncon := c[i].Wait()
		log.Printf("Consumer1 %d received %d packets", i, ncon)
	}
}
Producer2 --> Demux1 --> [cf.nSel * Consumer1]
package main
import (
	"log"
	"time"
)
type conf struct {
	nSel        int
	pEvery      time.Duration
	pBurstEvery int
	pBurstSz    int
	cDelay      time.Duration
	dBuffer     int
	runfor      time.Duration
}
func Prod1Cons1(cf conf) {
	p := NewProducer1(cf.nSel, cf.pEvery)
	c := NewConsumer1(0, p.Out, cf.cDelay)
	<-time.After(cf.runfor)
	npro := p.Stop()
	ncon := c.Wait()
	log.Println("Generated", npro, "packets")
	log.Println("Consumer received", ncon, "packets")
}