"고루틴"의 두 판 사이의 차이

 
(사용자 2명의 중간 판 8개는 보이지 않습니다)
5번째 줄: 5번째 줄:
* 다른 함수 또는 메소드들을 병렬적으로 실행하는 함수 또는 메소드
* 다른 함수 또는 메소드들을 병렬적으로 실행하는 함수 또는 메소드


<source lang='go' run>
<syntaxhighlight lang='go' run>
package main
package main
import (
import (
"fmt"
"fmt"
"time"
"time"
)
)
func say(s string) {
func say(s string) {
for i := 0; i < 5; i++ {
for i := 0; i < 5; i++ {
19번째 줄: 17번째 줄:
}
}
}
}
func main() {
func main() {
go say("world")
go say("world")
say("hello")
say("hello")
}
}
</source>
</syntaxhighlight>
 
<syntaxhighlight lang='go' run>
==예제==
// https://gobyexample.com/goroutines
{{소스헤더|goroutine.go}}
<source lang='go'>
package main
package main
import "fmt"
import (
import "time"
    "fmt"
 
    "time"
func say(s string) {
)
for i := 1; i <= 5; i++ {
func f(from string) {
time.Sleep(100 * time.Millisecond)
    for i := 0; i < 3; i++ {
fmt.Printf("%s%d\n", s, i)
        fmt.Println(from, ":", i)
}
    }
}
}
func main() {
func main() {
go say("고루틴")
    f("direct")
say("직접")
    go f("goroutine")
    go func(msg string) {
        fmt.Println(msg)
    }("going")
    time.Sleep(time.Second)
    fmt.Println("done")
}
}
</source>
</syntaxhighlight>
<source lang='console'>
$ go run goroutine.go
고루틴1
직접1
직접2
고루틴2
고루틴3
직접3
직접4
고루틴4
고루틴5
직접5
</source>


==같이 보기==
==같이 보기==
* [[Go 언어]]
* [[루틴]]
* [[루틴]]
* [[Go 채널]]
* [[Go repeatTask]]
* [[고루틴 vs 스레드]]


==참고==
==참고==
67번째 줄: 55번째 줄:
* https://gobyexample.com/goroutines
* https://gobyexample.com/goroutines


[[분류: Go]]
[[분류: 고루틴]]
[[분류: 쓰레드]]

2024년 1월 16일 (화) 15:29 기준 최신판

1 개요[ | ]

Goroutine
고루틴
  • Go 런타임이 관리하는 경량 쓰레드
  • 다른 함수 또는 메소드들을 병렬적으로 실행하는 함수 또는 메소드
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")
}
// https://gobyexample.com/goroutines
package main
import (
    "fmt"
    "time"
)
func f(from string) {
    for i := 0; i < 3; i++ {
        fmt.Println(from, ":", i)
    }
}
func main() {
    f("direct")
    go f("goroutine")
    go func(msg string) {
        fmt.Println(msg)
    }("going")
    time.Sleep(time.Second)
    fmt.Println("done")
}

2 같이 보기[ | ]

3 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}