Go 함수는 채널, 대기 그룹 또는 채널 제어 실행 흐름, 뮤텍스 또는 채널 동기화 작업을 통해 데이터를 전달하여 Goroutine과 상호 작용합니다. 데이터 전달: 채널을 FIFO 대기열로 사용하여 함수에서 코루틴으로 값을 보내고 받습니다. 실행 흐름 제어: 대기 그룹을 사용하여 코루틴이 실행을 완료할 때까지 기다리거나 채널을 사용하여 코루틴에 특정 작업을 수행하도록 알립니다. 동기화 작업: 뮤텍스 또는 채널을 사용하여 동시에 액세스되는 리소스를 동기화하여 한 번에 하나의 코루틴만 리소스에 액세스하도록 합니다.
Go 기능은 고루틴과 어떻게 상호작용하나요?
Go에서 고루틴은 동시에 실행되는 경량 스레드입니다. 이를 통해 코드를 병렬로 실행할 수 있어 애플리케이션 성능이 향상됩니다. 함수는 코루틴과 상호작용하여 실행 흐름을 제어하고, 데이터를 전달하고, 작업을 동기화할 수 있습니다.
데이터 전달
데이터는 채널을 통해 함수에서 코루틴으로 전달될 수 있습니다. 채널은 코루틴이 함수로부터 값을 받고 보낼 수 있게 해주는 FIFO(선입선출) 대기열입니다. 다음 예에서는 채널 사용 방법을 보여줍니다.
package main import "fmt" func sendData(ch chan<- int) { for i := 0; i < 10; i++ { ch <- i } close(ch) } func receiveData(ch <-chan int) { for { data, ok := <-ch if !ok { return } fmt.Println("Received:", data) } } func main() { ch := make(chan int) go sendData(ch) receiveData(ch) }
실행 흐름 제어
대기 그룹 또는 채널을 사용하여 코루틴의 실행 흐름을 제어할 수 있습니다. 대기 그룹을 사용하면 모든 코루틴의 실행이 완료될 때까지 기다릴 수 있으며, 채널을 사용하면 코루틴에 특정 작업을 수행하도록 알릴 수 있습니다. 다음 예에서는 대기 그룹을 사용하는 방법을 보여줍니다.
package main import ( "fmt" "sync" ) var wg sync.WaitGroup func task(i int) { fmt.Println("Task", i) wg.Done() } func main() { for i := 0; i < 10; i++ { wg.Add(1) go task(i) } wg.Wait() }
동기화 작업
동시에 액세스되는 리소스는 뮤텍스 또는 채널을 통해 동기화할 수 있습니다. 뮤텍스 뮤텍스를 사용하면 한 번에 하나의 코루틴이 리소스에 액세스할 수 있습니다. 채널을 사용하면 리소스를 사용할 수 있을 때까지 코루틴을 차단할 수 있습니다. 다음 예에서는 뮤텍스를 사용하는 방법을 보여줍니다.
package main import ( "fmt" "sync" ) var mutex sync.Mutex func task(data string) { mutex.Lock() fmt.Println(data) mutex.Unlock() } func main() { for i := 0; i < 10; i++ { go task(fmt.Sprintf("Task %d", i)) } }
위 내용은 golang 함수는 goroutine과 어떻게 상호 작용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!