Skip to content

Latest commit

 

History

History

lesson6

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

1.6. Параллельная выборка URL

Горутина - параллельное выполнение функции.

Канал является механизмом связи, который позволяет одной горутине передавать значения определенного типа другой горутине. Функция main выполняется в горутине, а инструкция go создает дополнительные горутины.

Функция main создает канал строк с помощью make. Для каждого url инструкция go в первом цикле по диапазону запускает горутину, которую fetch вызывает асинхронно для выборки url с помощью http.Get. Функция io.Copy() считывает тело ответа и игнорирует его, записывая в выходной поток io.Discard. Copy возвращает количество байтов и информацию о произошедших ошибках. При получении каждого результата fetch отправляет итоговую строку в канал ch. Второй цикл по диапазону в функции main получает и выводит эти строки.

Когда одна горутина пытается отправить или получить информацию по каналу, она блокируется, пока другая горутина пытается выполнить те же действия, и после передачи информации обе горутины продолжают работу.

В данном примере каждая функция fetch отправляет значение (ch <- expression) в канал ch, и main получает их все (<- ch). То, что весь вывод осуществляется функцией main, гарантирует, что вывод каждой горутины будет обработан как единое целое, без опасности получить на экране чередование вывода при завершении двух горутин в один и тот же момент времени.

Выводы:

  • Горутина - параллельное выполнение функции;
  • Канал является механизмом связи, который позволяет одной горутине передавать значения определенного типа другой горутине. Функция main выполняется в горутине, а инструкция go создает дополнительные горутины;
  • Функция io.Copy() считывает тело ответа и игнорирует его, записывая в выходной поток io.Discard. Copy возвращает количество байтов и информацию о произошедших ошибках;
  • Когда одна горутина пытается отправить или получить информацию по каналу, она блокируется, пока другая горутина пытается выполнить те же действия. После передачи информации обе горутины продолжают работу;
  • Весь вывод осуществляется функцией main, что гарантирует, что вывод каждой горутины будет обработан как единое целое без чередования вывода при завершении двух горутин в один и тот же момент времени.