Golang:4.4、Golang 并发编程-runtime包
  TEZNKK3IfmPf 2023年11月15日 47 0

4.4、Golang 并发编程-runtime包

runtime定义了协程管理的包

Gosched

让出执行权限

示例

package main

import (
    "fmt"
)

func show() {
    for i := 0; i < 2; i++ {
        fmt.Printf("show i: %v\n", i)
    }
}

func main() {
    go show()

    for i := 0; i < 2; i++ {
        fmt.Printf("main i: %v\n", i)
    }

    fmt.Println("end")
}

输出

main i: 0
main i: 1
end

示例 2

package main

import (
    "fmt"
    "runtime"
)

func show() {
    for i := 0; i < 2; i++ {
        fmt.Printf("show i: %v\n", i)
    }
}

func main() {
    go show()

    for i := 0; i < 2; i++ {

        // 让出执行权限,给其他子协程执行
        runtime.Gosched()

        fmt.Printf("main i: %v\n", i)
    }

    fmt.Println("end")
}

输出

show i: 0
main i: 0
main i: 1
end

Goexit

退出当前协程

示例

package main

import (
    "fmt"
    "runtime"
    "time"
)

func show() {
    for i := 0; i < 10; i++ {
        fmt.Printf("show i: %v\n", i)
        if i >= 5 {
            runtime.Goexit()
        }
    }
}

func main() {
    go show()

    time.Sleep(time.Second)

    fmt.Println("end")
}

输出

show i: 0
show i: 1
show i: 2
show i: 3
show i: 4
show i: 5
end

GOMAXPROCS

设置CPU数量

package main

import (
    "fmt"
    "runtime"
    "time"
)

func show(name string) {
    for i := 0; i < 10; i++ {
        fmt.Printf("%v i: %v\n", name, i)
    }
}

func main() {

    // 查看CPU核数
    fmt.Printf("runtime.NumCPU(): %v\n", runtime.NumCPU())
    // runtime.NumCPU(): 8

    // 设置CPU数量
    runtime.GOMAXPROCS(2)

    go show("A")
    go show("B")

    time.Sleep(time.Second)

    fmt.Println("end")
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月17日   44   0   0 golanghttps
  TEZNKK3IfmPf   2023年11月15日   33   0   0 golang
  TEZNKK3IfmPf   2024年05月31日   24   0   0 后端golang开发语言
  TEZNKK3IfmPf   2023年11月15日   32   0   0 golang
  TEZNKK3IfmPf   2024年05月17日   53   0   0 算法javagolang
TEZNKK3IfmPf