go语言的GMP模型

GMP 模型是 Go 语言运行时系统的核心模型,用于管理 goroutine、线程(M)和处理器(P)

**G(Goroutine)**:
- 是 Go 语言中轻量级的执行线程
- 可以理解为用户级的线程,创建开销小,资源占用少

**M(Machine 或 OS Thread)**:
- 代表操作系统线程
- 实际执行计算任务。

**P(Processor)**:
- 是一个逻辑处理器,关联着一个 M 和一个运行队列
- 起到调度 G 的作用,为 G 分配 M 来执行

GMP 模型的工作流程大致如下:
1. 新创建的 G 被放入 P 的本地队列。C-->P-->M
2. P 会从本地队列获取可运行的 G 分配给 M 执行
3. 如果本地队列为空,P 会尝试从全局队列获取 G
4. 当 M 因系统调用等原因阻塞时,P 会与 M 分离,寻找新的 M 来继续执行任务

GMP 模型使得 Go 语言能够高效地利用多核处理器,实现高并发的编程。以下是一个简单的示例代码,展示如何创建多个 goroutine :

package main

import (
    "fmt"
    "time"
)

func task(id int) {
    fmt.Printf("Task %d is running\n", id)
    time.Sleep(2 * time.Second)
    fmt.Printf("Task %d is done\n", id)
}

func main() {
    for i := 1; i <= 5; i++ {
        go task(i)
    }
    time.Sleep(5 * time.Second)
}

在上述代码中,通过 `go` 关键字创建了 5 个 goroutine 来并发执行 `task` 函数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值