协程管理
runtime包中的协程管理函数可以控制协程的创建和退出,如下所示:
代码语言:javascript复制package main
import (
"fmt"
"runtime"
)
func main() {
go func() {
fmt.Println("Hello, world!")
}()
runtime.Gosched()
}
上面的代码创建了一个协程并输出Hello, world!,然后调用runtime包中的Gosched函数,使当前协程让出CPU时间片,以便其他协程运行。
栈管理
runtime包中的栈管理函数可以控制协程栈的大小和增长方式,如下所示:
代码语言:javascript复制package main
import (
"fmt"
"runtime"
)
func main() {
var mem runtime.MemStats
runtime.ReadMemStats(&mem)
fmt.Printf("StackInuse = %v MiBn", mem.StackInuse/1024/1024)
fmt.Printf("StackSys = %v MiBn", mem.StackSys/1024/1024)
runtime.SetMaxStack(16 * 1024 * 1024)
runtime.ReadMemStats(&mem)
fmt.Printf("StackInuse = %v MiBn", mem.StackInuse/1024/1024)
fmt.Printf("StackSys = %v MiBn", mem.StackSys/1024/1024)
}
上面的代码先打印出协程栈的使用情况和总大小,然后将协程栈的最大大小设置为16MB,最后再次打印出协程栈的使用情况和总大小。