golang中的多线程

本文介绍了Go语言中的goroutine,它是轻量级线程,用于并发执行任务。通过示例代码展示了`runtime.Gosched()`如何让出CPU时间片,使得1和2交替打印。还提到了`runtime.NumCPU()`和`runtime.NumGoroutine()`等函数,用于获取CPU核心数和goroutine数量。最后,`runtime.Goexit()`用于结束当前goroutine。

首先先了解一下什么是线程,什么是进程以及线程的调度

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

结束当前的线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值