KhodeN
3/20/2018 - 7:50 AM

batch_paraller.go

batch_paraller.go

package main

import (
	"fmt"
	"time"
)

func main() {
	input := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

	inChan := make(chan int, 3)
	outChan := make(chan int, len(input))

	for i := 0; i < 3; i++ {
		go run(inChan, outChan)
	}

	for _, v := range input {
		inChan <- v
		fmt.Printf("%d ", v)
	}
	close(inChan)

	for range input {
		fmt.Printf("\n%d", <-outChan)
	}
}

func run(i <-chan int, o chan<- int) {
	for {
		select {
		case v, ok := <-i:
			if !ok {
				break
			}

			time.Sleep(time.Second * time.Duration(v/4))
			res := v * v

			o <- res
		}
	}
}