0
点赞
收藏
分享

微信扫一扫

Golang GMP模型代码示例


以下是一个简单的示例代码,用于说明Go语言中的GMP模型:

package main

import (
	"fmt"
	"runtime"
	"sync"
)

func main() {
	// 设置使用多个逻辑处理器
	runtime.GOMAXPROCS(2)

	// 创建一个等待组,用于等待所有Goroutine完成
	var wg sync.WaitGroup

	// 启动两个Goroutine
	wg.Add(2)
	go printHello(&wg)
	go printWorld(&wg)

	// 等待所有Goroutine完成
	wg.Wait()
}

func printHello(wg *sync.WaitGroup) {
	// 在这个Goroutine中打印"Hello"
	fmt.Println("Hello")
	wg.Done() // 表示Goroutine已完成
}

func printWorld(wg *sync.WaitGroup) {
	// 在这个Goroutine中打印"World"
	fmt.Println("World")
	wg.Done() // 表示Goroutine已完成
}

在上述代码中,我们使用了 runtime.GOMAXPROCS(2) 来设置使用两个逻辑处理器(P)。这样可以并发地执行两个Goroutine。

通过 sync.WaitGroup 来等待所有Goroutine完成。我们创建了一个等待组 wg,并在每个Goroutine的末尾调用 wg.Done() 来表示Goroutine已完成。wg.Wait() 会阻塞主Goroutine,直到所有Goroutine都完成。

printHello 函数和 printWorld 函数中,分别打印 “Hello” 和 “World”。这两个函数会被并发地执行,由两个M(线程)来执行。

通过这个简单的例子,可以看到GMP模型的体现:Goroutine作为并发的执行单元,M(线程)用于执行计算任务,P(逻辑处理器)用于调度和管理Goroutine的执行。


举报

相关推荐

0 条评论