Как получить параллельный метод - PullRequest
1 голос
/ 05 мая 2010

Как получить параллельный метод?

type test struct {
    foo uint8
    bar uint8
}

func NewTest(arg1 string) (*test, os.Error) {...}

func (self *test) Get(str string) ([]byte, os.Error) {...}

Я думаю, что весь код для метода Get() следует поместить внутрь go func(), а затем использовать канал.

func (self *test) Get(str string) ([]byte, os.Error) {
    go func() {
        // Code for this method.
    }()
}
  • Будет ли проблема, если вызывается другой метод из Get()?Или это также должно быть одновременно?

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Взгляните на раздел Пример пакета в спецификации языка Go, который представляет собой полный пакет Go, который реализует параллельное простое сито с использованием операторов go и каналов.

Подробное описание того, как это работает, см. В разделе «Учебник по Go» на Простые числа . Кроме того, посмотрите раздел «Учебник по Go» по Мультиплексирование .

Прочитайте раздел «Эффективное поступление» на Параллелизм .

Наконец, прочтите соответствующие разделы спецификации языка Go, например, разделы операторы Go , типы каналов и операторы Select .

Да, вы можете вызвать другой метод из вашего метода Get (). Поскольку вызов метода не является параллельным оператором go, он будет выполнен немедленно, прежде чем будет выполнен следующий оператор.

1 голос
/ 06 мая 2010

Вы получаете параллелизм в go, используя ключевое слово "go" перед функциями, которые вы хотите выполнять одновременно:

func bar () {...}

func foo () { идти бар () идти бар () идти бар () ... код, который ждет закрытия всех баров ... }

Это все, что нужно, чтобы запустить 3 бара одновременно. PS: Возможно, вы захотите привести пример на языке, с которым вы знакомы, C ++ / Perl / Python / что угодно, так как включенный фрагмент кода go не очень помог. Я понимаю, что вы, вероятно, говорите по-английски лучше, чем я говорю на вашем родном языке, но вам также может понадобиться помощь для более четкой формулировки вашего вопроса.

Хоти

...