English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основные курсы Golang

Контрольные операторы в Golang

Функции и методы в Golang

Структуры в Golang

Срезы и массивы в Golang

Строки (String) в Golang

Указатели в Golang

Интерфейсы в Golang

Конкурентное программирование в Golang

Исключения (Error) в Golang

Другие темы Golang

Множественные Goroutine в Go

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

func name(){
// оператор
}
//создание goroutine с помощью ключевого слова go
go name()

Теперь, используя пример, рассмотрим, как создавать и использовать несколько goroutine:

package main
import (
    "fmt"
    "time"
)
//goroutine 1
func Aname() {
    arr1 := [4]string{"Rohit", "Suman", "Aman", "Ria"}
    for t1 := 0; t1 <= 3; t1++ {
        time.Sleep(150 * time.Millisecond)
        fmt.Printf("%s\n", arr1[t1])
    }
}
// goroutine 2
func Aid() {
    arr2 := [4]int{300, 301, 302, 303}
    for t2 := 0; t2 <= 3; t2++ {
        time.Sleep(500 * time.Millisecond)
        fmt.Printf("%d\n", arr2[t2])
    }
}
func main() {
    fmt.Println("!...Основной Go-routine начал...!")
    // вызов Goroutine 1
    go Aname()
    // вызов Goroutine 2
    go Aid()
    time.Sleep(3500 * time.Millisecond)
    fmt.Println("\n!...Основной Go-routine завершен...!")
}

вывод:

!...Основной Go-routine начал...!
Rohit
Suman
Aman
300
Ria
301
302
303
!...Основной Go-routine завершен...!

создание:в предыдущем примере, кроме основного goroutine, у нас также есть два goroutine, то естьAnameиAid. Здесь,Anameвывод имени автора,Aidвывод идентификатора автора.

работа:здесь у нас есть два goroutine, то естьAnameиAid,а также один основной goroutine. Когда мы впервые запускаем этот программу, основной goroutine分层 и выводит “!...Основной Go-routine начал...!” Здесь основной goroutine подобен родительскому goroutine, а другие goroutine являются его подпроцессами, поэтому сначала запускается основной goroutine, а затем другие goroutine. Если основной goroutine завершается, то и другие goroutine также завершаются. Поэтому, после основного goroutine,AnameиAid goroutine одновременно начнут работать. Aname goroutine начнет работу с 150ms, а Aid с 500ms.