首先先了解一下什么是线程,什么是进程以及线程的调度
goroutine注意:goroutine本质上是一个协程,详细请点击这里
在runtime包里面,提供了相关的函数。
直接创建一个新的线程
runtime.Gosched()用于让出CPU的时间片。
正常情况下,CPU的一个内核只能在同一时间运行一个线程,但是现在部分电脑通过超线程技术将一个物理内核虚拟成两个逻辑内核。
用一个生动的比喻,这个函数就是将CPU运行的接力棒交出来,至于交给谁呢,就是要看调度了。
对于下面这个代码
package main
import (
"fmt"
)
func Print1() {
for i := 1; i <= 10; i++ {
fmt.Println("1")
}
}
func Print2() {
for i := 1; i <= 10; i++ {
fmt.Println("2")
}
}
func main() {
go Print1()
go Print2()
var s string
fmt.Scan(&s)
}
它最后的输出是10个连续的1,然后是10个连续的2。
再看看这段代码:
package main
import (
"fmt"
"runtime"
)
func Print1() {
for i := 1; i <= 10; i++ {
fmt.Println("1")
runtime.Gosched()
}
}
func Print2() {
for i := 1; i <= 10; i++ {
fmt.Println("2")
runtime.Gosched()
}
}
func main() {
go Print1()
go Print2()
var s string
fmt.Scan(&s)
}
它的输出结果就是1,2交替输出。
runtime.NumCPU()返回值为当前电脑的CPU核数
runtime.NumGoroutine()返回值为goroutine线程数
runtime.Goexit()结束当前的线程
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)