Шаг 63.
Язык программирования Go.
Go-подпрограмма

    На этом шаге начнем знакомиться с инструкциями организации взаимодействий и параллельного выполнения в Go. Рассмотрим понятие go-подпрограмм.

    Go-подпрограмма – это функция или метод, выполняющаяся независимо и параллельно с другими go-подпрограммами в программе. Любая программа на языке Go имеет как минимум одну go- подпрограмму – главную go-подпрограмму, в которой выполняется функция main() из пакета main.

    Go-подпрограммы больше похожи на легковесные потоки выполнения или сопрограммы, в том смысле что они могут создаваться в большом количестве (тогда как даже небольшое количество обычных потоков выполнения потребляет значительное количество системных ресурсов).

    Все go-подпрограммы выполняются в общем адресном пространстве, и в языке Go имеется ряд элементарных механизмов блокировки, обеспечивающих безопасное совместное использование данных go-подпрограммами. Однако при параллельном программировании на языке Go рекомендуется использовать подход, основанный на обмене данными, а не на их совместном использовании.

    Каналом в языке Go называется одно- или двунаправленный канал, используемый для организации обмена (приема и передачи) данными между двумя или более go-подпрограммами.

    Вместе go-подпрограммы и каналы обеспечивают легковесный (масштабируемый) способ параллельного выполнения без использования разделяемой памяти и потому не требующий применения блокировок. Большинство операционных систем прекрасно приспособлены для одновременного выполнения множества программ, и использование этой возможности способно уменьшить трудозатраты на сопровождение, когда, например, выполняются несколько программ (или несколько копий одной программы), каждая из которых оперирует своим набором данных.

    Go-подпрограмма создается с помощью инструкции go, имеющей следующий синтаксис:

go функция(аргументы)
go func(параметры) { блок }(аргументы) 

    Инструкция go либо вызывает уже имеющуюся функцию, либо анонимную функцию, созданную на месте вызова инструкции.

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

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

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


Предыдущий шаг Содержание Следующий шаг