Генераторы стиля Python -в Go

В настоящее время я работаю над Tour of Go , и я подумал, что горутины использовались аналогично генераторам Python, особенно с Вопросом 66 . Я подумал, что 66 выглядит сложно, поэтому я переписал его так:

package main

import "fmt"

func fibonacci(c chan int) {
    x, y := 1, 1

    for {
        c <- x
        x, y = y, x + y
    }
}

func main() {
    c := make(chan int)
    go fibonacci(c)

    for i := 0; i < 10; i++ {
        fmt.Println(<-c)
    }
}

Кажется, это работает. Пара вопросов:

  1. Если я увеличу размер буфера на канале до 10, fibonacciзаполнит еще 10 мест как можно быстрее, а mainсъест места так быстро, как только сможет. Это правильно? Это было бы более производительно, чем размер буфера 1 за счет памяти, верно?
  2. Поскольку канал не закрывается отправителем fibonacci, что происходит с памятью -, когда мы выходим за пределы области действия? Я ожидаю, что как только cи go fibonacciвыйдут за рамки, канал и все, что на нем, будет собирать мусор -. Моя интуиция подсказывает мне, что это, вероятно, не то, что происходит.

28
задан laike9m 30 October 2015 в 17:19
поделиться