Golang协程并行笔记

协程goroutine

package main

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

// 注意:只要主进程执行结束完毕,则协程就会立即中止退出执行
// 协程执行结束完毕,对主进程不会有影响

// 执行该go文件程序,在主线程中每500毫秒输出一个Go,输出十次后退出程序
// 并且在主线程中开启一个goroutine协程每500毫秒输出一个Go
// 示例goroutine和主线程并行

func test1() {
	for i := 1; i < 11; i++ {
		fmt.Println("test()方法输出的 Go", i)
		time.Sleep(time.Millisecond * 500)
	}
}

// 用sync.WaitGroup实现等待协程执行完毕之后才会退出主线程
var wg sync.WaitGroup

func test2() {
	for i := 1; i < 11; i++ {
		fmt.Println("test()方法输出的 Go", i)
		time.Sleep(time.Millisecond * 500)
	}
	wg.Done() // 协程数-1
}

func main() {
	// 这样的写法会顺序先执行test()方法输出十次 再执行主线程的输出十次
	// test1()
	// for i := 1; i < 11; i++ {
	// 	fmt.Println("主线程中输出的 Go", i)
	// 	time.Sleep(time.Millisecond * 500)
	// }

	// 下面示例开启一个协程
	// go test1()
	// for i := 1; i < 11; i++ {
	// 	fmt.Println("主线程中输出的 Go", i)
	// 	time.Sleep(time.Millisecond * 500)
	// }

	// 可以用sync.WaitGroup实现等待协程执行完毕之后才会退出主线程
	wg.Add(1) // 协程数+1
	go test2()
	for i := 1; i < 11; i++ {
		fmt.Println("主线程中输出的 Go", i)
		time.Sleep(time.Millisecond * 100) // 此主线程执行100毫秒,执行结束的会比协程要快
	}
	wg.Wait() // 程序执行到此语句后会等待所有协程都执行完毕才会退出

	fmt.Println(runtime.NumCPU(), "个逻辑CPU") // 获取计算机上逻辑CPU的个数
	runtime.GOMAXPROCS(6)                   // 自己设置该Go程序运行时所要占用的CPU个数

	fmt.Println("程序退出了!!!")
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值