Golang의 동시성
3522 단어 concurrencygoprogramming
고루틴은 기본적으로 메인 스레드를 차단하지 않고 활동을 완료하는 "스레드와 같은"경량 구조입니다. 그들은 기본적으로 고루틴이 완료되면 go clean up을 하는 "fire and forget"원인입니다. 그러나 완료되었을 때 고루틴 프로세스에서 데이터를 가져오려면 채널을 사용할 수 있습니다.
import "fmt"
// Essentially this is how we fire a goroutine
func runForAWhile(){
// do something pretty that takes 5 secs or 2 yrs
}
func main(){
go runForAWhile()
fmt.Println("I am not waiting for that...")
}
go
키워드를 사용하면 Go는 해당 기능의 작업을 기본 범위 밖으로 보내고 나머지 코드를 계속 실행한다는 것을 알고 있습니다. 그러나 프로그램은 고루틴이 완료될 때까지 끝나지 않습니다.위의 예를 실행하면
Println
문이 거의 즉시 실행되는 반면 고루틴이 종료된 후 프로그램 자체가 종료된다는 것을 알 수 있습니다.채널은 프로그램을 종료하기 전에 고루틴의 출력을 기다리는 효과적인 방법입니다. 2개의 고루틴을 사용하여 2개의 API 호출을 수행했다고 가정해 봅시다. 우리는 반드시 그 결과를 메인 스코프에 다시 가져오기를 원합니다. 다음은 이를 달성할 수 있는 방법을 설명하는 예제 코드입니다.
import "fmt"
func apiRequest1(c chan string){
var result string
result = makeApiCall1()
c <- result
}
func apiRequest2(c chan string){
var result string
result = makeApiCall2()
c <- result
}
func main(){
var channel1, channel2 chan string
go apiRequest1(channel1)
go apiRequest2(channel2)
result1 := <- channel1
result2 := <- channel2
fmt.Println(result1, result2)
}
Reference
이 문제에 관하여(Golang의 동시성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/iambenkay/concurrency-in-golang-42bm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)