Go
Goroutines
Поиск…
Вступление
Горотин - это легкий поток, управляемый Run runtime.
go f (x, y, z)
запускает новый горутин
f (x, y, z)
Оценка f, x, y и z происходит в текущем goroutine, и выполнение f происходит в новом goroutine.
Горутинцы работают в одном и том же адресном пространстве, поэтому доступ к общей памяти должен быть синхронизирован. Пакет sync предоставляет полезные примитивы, хотя они вам не понадобятся в Go, так как есть другие примитивы.
Основная программа Goroutines
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
Горотин - это функция, которая может работать одновременно с другими функциями. Чтобы создать goroutine, мы используем ключевое слово go
за которым следует вызов функции:
package main
import "fmt"
func f(n int) {
for i := 0; i < 10; i++ {
fmt.Println(n, ":", i)
}
}
func main() {
go f(0)
var input string
fmt.Scanln(&input)
}
Как правило, вызов функции выполняет все утверждения внутри тела функции и возвращается к следующей строке. Но с goroutines мы немедленно возвращаемся к следующей строке, так как не дождаемся завершения функции. Таким образом, Scanln
функции Scanln
, иначе программа Scanln
без печати номеров.