[t:/]$ 지식_

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()
}








[t:/] is not "technology - root". dawnsea, rss