Перейти канал в дочерних процедурах - PullRequest
0 голосов
/ 20 декабря 2018

Какова лучшая практика для создания каналов в программировании?Для организации и ясности, вы должны создать все каналы в основной рутине?

Я рассмотрел код перехода, в котором каналы создаются внутри дочерней процедуры.Являются ли эти каналы недоступными для основной процедуры, когда она создается в дочерней программе?

Пожалуйста, уточните.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Я многое узнал о модели параллелизма в Перейти рекомендую статьи .И я узнаю, где создать канал в разных ситуациях одновременно.

Например, в модели конвейера, создание канала на начальной стадии и передача его в анонимную процедуру перехода.Когда начальный этап закончен, он может закрыть канал.

Я надеюсь, что эти статьи полезны.

0 голосов
/ 20 декабря 2018

Любая программа может взаимодействовать с любым каналом в своей области действия , как и любая другая переменная.Неважно, где был создан канал.Однако важно то, что у подпрограмм, взаимодействующих через поток, есть ссылка на канал.

Причина, по которой "разветвляющаяся" или "родительская" подпрограмма обычно создает канал, заключается в том, что если дочерний элемент создалканал, у него не было бы никакого способа поделиться им с родителем.Подумайте:

go func(){
  ch := make(chan int)
}
// how would we refer to `ch` out here?

Неважно, кто создает канал, нет понятия «владение» канала.Но программы, записывающие канал, должны ссылаться на него, поэтому они создаются в «родительском» потоке и передаются или передаются в программу.В противном случае родитель не сможет получить канал от ребенка (вы можете передать канал в канал, но это доказывает это!)

...