首页 文章 Go语言基础 疯狂 Golang 小实验(1): 直接掌控协程生命周期.md
0
0
0
21

疯狂 Golang 小实验(1): 直接掌控协程生命周期.md

安全与加密 周期 生命 Golang md

$GOROOT/src/runtime 目录下新建一个 whatever.go 文件,文件内容如下:

package runtime

type G = g

func GetG() *G {
    return getg()
}

var l mutex

func GoPark() {
    lock(&l)
    goparkunlock(&l, 0, 0, 0)
}

func GoReady(g *G) {
    goready(g, 3)
}

然后我们就可以在自己的代码中疯狂地玩耍比如这样:

package main

import (
    "runtime"
    "sync"
    "time"
)

func main() {
    ch := make(chan bool)
    var g *runtime.G

    go func() {
        g = runtime.GetG()
        for {
            println(time.Now().Unix())
            time.Sleep(time.Second)

            select {
            case <-ch:
                runtime.GoPark()
            default:
            }
        }
    }()

    time.Sleep(3 * time.Second)
    ch <- true
    time.Sleep(3 * time.Second)
    runtime.GoReady(g)

    wg := &sync.WaitGroup{}
    wg.Add(1)
    wg.Wait()
}

不解释,自己看。


到此这篇关于“疯狂 Golang 小实验(1): 直接掌控协程生命周期.md”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持Go语言编程网!

相关文章

创建博客

开始创作
写作能提升自己能力,也能为他人分享知识。

在线教程

查看更多
  • Go入门指南

    Go入门指南

  • Go语言高级编程

    Go语言高级编程

  • Go Web 编程

    Go Web 编程

  • GO专家编程

    GO专家编程

  • Go语言四十二章经

    Go语言四十二章经

  • 数据结构和算法(Golang实现)

    数据结构和算法(Golang实现)

Go语言编程网

微信扫码关注订阅号


博客 资讯 教程 我的