Введение
Этот лаба предназначен для проверки вашего понимания горутин в Golang. Горутины - это легковесные потоки выполнения, которые позволяют выполнять функции одновременно.
Горутины
Задача, которую нужно решить в этом лабе, - это создать и запустить горутины для одновременного выполнения функций.
- Функция
fдолжна выводить свою входящую строку и переменную-счетчик три раза. - Функция
mainдолжна вызывать функциюfсинхронно и выводить "direct" и переменную-счетчик три раза. - Функция
mainдолжна вызывать функциюfасинхронно с использованием горутины и выводить "goroutine" и переменную-счетчик три раза. - Функция
mainдолжна запустить горутину для выполнения анонимной функции, которая выводит сообщение. - Функция
mainдолжна дождаться завершения выполнения горутин, прежде чем вывести "done".
## Когда мы запускаем эту программу, мы видим вывод
## блокирующего вызова сначала, а затем вывод двух
## горутин. Вывод горутин может быть перемешанным,
## потому что горутины выполняются одновременно
## Go-런таймом.
## Далее мы рассмотрим дополнение к горутинам в
## конкурентных Go-программах: каналы.
Ниже представлен полный код:
// _Горутина_ - это легковесный поток выполнения.
package main
import (
"fmt"
"time"
)
func f(from string) {
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
}
func main() {
// Предположим, что у нас есть вызов функции `f(s)`. Вот,
// как мы бы вызывали это обычным способом, запуская
// его синхронно.
f("direct")
// Чтобы вызвать эту функцию в горутине, используйте
// `go f(s)`. Эта новая горутина будет выполняться
// одновременно с вызывающей.
go f("goroutine")
// Также можно запустить горутину для вызова
// анонимной функции.
go func(msg string) {
fmt.Println(msg)
}("going")
// Наши два вызова функций теперь выполняются
// асинхронно в отдельных горутинах. Дождитесь их
// завершения (для более надежного подхода используйте
// [WaitGroup](waitgroups)).
time.Sleep(time.Second)
fmt.Println("done")
}
Резюме
В этом лабе вы узнали, как создавать и запускать горутины для одновременного выполнения функций. Также вы узнали, как запускать горутину для выполнения анонимной функции и как дождаться завершения выполнения горутин.