예제 패키지

아래의 Go 패키지 예제는 소수를 찾는 알고리즘인 에라토스테네스의 체(prime sieve)를 동시적(concurrent)으로 구현한 것이다.

package main

import "fmt"

// 2, 3, 4, ... 로 이어지는 연속된 숫자를 채널 'ch'로 보낸다.
func generate(ch chan<- int) {
    for i := 2; ; i++ {
        ch <- i  // 'i'를 채널 'ch'에 보낸다.
    }
}

// 'prime'으로 나눌 수 있는 것들은 제거 하면서,
// 채널 'src'에서 채널 'dst'로 값들을 복사한다.
func filter(src <-chan int, dst chan<- int, prime int) {
    for i := range src {  // 'src'로 부터 받은 값들을 루프에서 처리한다.
        if i%prime != 0 {
            dst <- i  // 'i'를 채널 'dst'에 보낸다.
        }
    }
}

// The prime sieve: 데이지-체인 필터가 함께 처리된다.
func sieve() {
    ch := make(chan int)  // 새 채널을 만든다.
    go generate(ch)       // generate()를 서브 프로세스로 시작한다.
    for {
        prime := <-ch
        fmt.Print(prime, "\n")
        ch1 := make(chan int)
        go filter(ch, ch1, prime)
        ch = ch1
    }
}

func main() {
    sieve()
}

results matching ""

    No results matching ""