goroutine

注意:goroutine本质上是一个协程,详细请点击这里
在runtime包里面,提供了相关的函数。

go函数名()

直接创建一个新的线程

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()

结束当前的线程