Go 언어에서는 함수와 고루틴이 동시 프로그래밍을 구현합니다. Go 함수는 go 키워드를 통해 동시에 실행될 수 있으며, 고루틴은 새로운 스택을 할당하고 주어진 함수를 실행하여 동시성을 달성하는 경량 스레드입니다. 실제 사례에서는 데이터 경쟁을 방지하기 위해 뮤텍스 잠금(동기화 패키지)을 사용하고 동시 기능의 취소 및 만료를 제어하기 위해 컨텍스트(컨텍스트 패키지)를 사용합니다.
다양한 동시성 라이브러리에서 Go 기능 및 Goroutine 구현
Go는 다양한 동시성 기본 요소를 제공하므로 개발자가 동시성 프로그램을 쉽게 작성할 수 있습니다. 이 기사에서는 가장 일반적으로 사용되는 두 가지 동시성 라이브러리를 살펴보겠습니다.
Function
Go 함수는 병렬로 실행될 수 있으므로 동시성을 달성할 수 있습니다. 동시 함수는 다음 구문을 사용하여 생성할 수 있습니다.
go func() { // 并发执行的代码 }
Goroutine
Goroutine은 동시에 실행될 수 있는 Go 경량 스레드입니다. 고루틴이 생성되면 새로운 스택이 할당되고 주어진 기능의 실행이 시작됩니다. 고루틴은 다음 구문을 사용하여 생성할 수 있습니다:
go func() { // 并发执行的代码 }()
실용 사례: Mutex 잠금
Mutex 잠금은 공유 리소스에 대한 액세스를 조정하고 데이터 경쟁을 방지하는 데 사용됩니다. 동기화 패키지는 공유 변수를 보호하는 데 사용할 수 있는 Mutex
유형을 제공합니다. Mutex
类型,我们可以使用它来保护共享变量。
import ( "sync" "fmt" ) var ( count int mu sync.Mutex ) func increment() { mu.Lock() count++ mu.Unlock() } func main() { for i := 0; i < 1000; i++ { go increment() } fmt.Println(count) // 输出: 1000 }
实战案例:Context
Context 用于传递请求或操作的取消状态。context 包提供了 Context
和 CancelFunc
import ( "context" "fmt" "time" ) func main() { // 创建一个 Context,并在 1 秒后取消 ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() go func() { // 在 Context 被取消之前,不断打印 for { select { case <-ctx.Done(): fmt.Println("Context cancelled") break default: fmt.Println("Still running...") time.Sleep(100 * time.Millisecond) } } }() // 等待 Goroutine 完成或 Context 被取消 <-ctx.Done() }
실제 사례: Context
🎜🎜Context는 요청 또는 작업의 취소 상태를 전달하는 데 사용됩니다. context 패키지는 동시 기능을 제어하는 데 사용할 수 있는Context
및 CancelFunc
유형을 제공합니다. 🎜rrreee🎜다른 동시성 라이브러리에서 함수와 고루틴은 약간 다르게 구현될 수 있지만 핵심 개념은 동일하게 유지됩니다. 동기화 유형은 공유 리소스에 대한 액세스를 조정하는 데 사용되는 반면 컨텍스트는 동시 기능의 취소 및 만료를 관리하는 데 사용됩니다. 🎜위 내용은 다양한 동시성 라이브러리에서 golang 함수 및 goroutine 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!