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

Golang 基础教程

Golang 控制语句

Golang 函数 & 方法

Golang 结构体

Golang 切片 & 数组

Golang 字符串(String)

Golang 指针

Golang 接口

Golang 并发

Golang 异常(Error)

Golang 其他杂项

Go 언어 다중 Goroutine

Goroutine는 함수나 메서드로, 프로그램에서 존재하는 다른 Goroutine와 독립적으로 동시에 실행할 수 있는 것입니다. 다시 말해, Go 언어에서 동시에 실행되는 모든 활동을 Goroutines라고 합니다. Go 언어에서는 프로그램에서 여러 개의 goroutine를 생성할 수 있습니다. go 키워드를 함수나 메서드 호출 전에 사용하여 goroutine를 생성할 수 있습니다. 다음과 같은 문법을 사용합니다:

func name(){
// 문장
}
//go 키워드로 goroutine 생성
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가 있습니다. 즉AnameAid여기서Aname작성자의 이름을 출력합니다.Aid작성자의 id를 출력합니다.

작업:여기서 우리는 두 개의 goroutine가 있습니다. 즉AnameAid또한 하나의 주goroutine가 있습니다. 이 프로그램을 처음 실행할 때, 주goroutine가 계층적으로 실행되어 “!...주 Go”를 출력합니다.-routine가 시작합니다...!” 여기서의 주goroutine는 부모goroutine와 같으며, 다른 goroutine는 그의 자식 프로세스입니다. 따라서 먼저 주goroutine를 실행한 후 다른 goroutine를 시작하며, 주goroutine가 종료되면 다른 goroutine도 종료됩니다. 따라서 주goroutine 이후에AnameAid goroutine가 동시에 작업을 시작합니다. Aname goroutine는150ms에서 작업을 시작하며, Aid는500ms 시작 작업。