go 고루틴, SCV들에게 나눠서 일 시키기

2020/06/19

아직 공부하는 중이므로 다름이 아니라 틀릴 수 있음.

다음 코드는 어떤 일을 scv에 해당하는 고루틴들에게 나눠서 일을 시킨다.
waitgroup을 이용하여 scv의 최대 마릿수를 지정한다.

분할 정복이 아니라면 각 go 루틴은 뮤텍스등을 이용하여 동시성 구현을 해야 한다.

package main

import (
	"sync"
)
	

var gogo = make(chan int)
var stop = make(chan int)

func scv(my int) {

	println("시작", my)

	for {
	
		select {
		
		case k := <- gogo:
			println("내가 할께", my, k) 
			
		case <- stop:
			return
		
		}
	
	}

}


func main() {

	wg := sync.WaitGroup{}
	
	wg.Add(10)

	for i := 0; i < 10; i++ {
		go scv(i)
	}
	
	for i := 0; i < 10; i++ {
		gogo <- i
	}
	
	for i := 0; i < 10; i++ {
		stop <- 1
		wg.Done()
	}	

	wg.Wait()
}