前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >14.Go语言-协程

14.Go语言-协程

原创
作者头像
面向加薪学习
发布2022-09-04 11:05:46
2280
发布2022-09-04 11:05:46
举报
文章被收录于专栏:面向加薪学习面向加薪学习

第 14 章 go 协程

Go 语言的 协程(Groutine) 是与其他函数或方法一起并发运行的工作方式。协程可以看作是轻量级线程。与线程相比,创建一个协程的成本很小。因此在 Go 应用中,常常会看到会有很多协程并发地运行。

14.1 启动一个 go 协程

调用函数或者方法时,如果在前面加上关键字 go ,就可以让一个新的 Go 协程并发地运行。

代码语言:go
复制
// 定义一个函数
func functionName(parameterList) {
    code
}

// 执行一个函数
functionName(parameterList)

// 开启一个协程执行这个函数
go functionName(parameterList)

下面是启动一个协程的例子, go PrintInfo()PrintInfo() 函数与 main() 函数会并发执行,主函数运行在一个特殊的协程上,这个协程称之为 主协程(Main Goroutine)

启动一个新的协程时,协程的调用会立即返回。与函数不同,程序控制不会去等待 Go 协程执行完毕。在调用 Go 协程之后,程序控制会立即返回到代码的下一行,忽略该协程的任何返回值。如果 Go 主协程终止,则程序终止,于是其他 Go 协程也会终止。为了让新的协程能继续运行,我们在 main() 函数添加了 time.Sleep(1 * time.Second) 使主协程休眠 1 秒,但这种做法并不推荐,这里只是为了演示而添加。

代码语言:go
复制
package main

import (
 "fmt"
 "time"
)

func PrintInfo() {
 fmt.Println("从0到Go语言微服务架构师")
}

func main() {
 // 开启一个协程执行 PrintInfo 函数
 go PrintInfo()
 // 使主协程休眠 1 秒
 time.Sleep(1 * time.Second)
 // 打印 main
 fmt.Println("main")
}

14.2 启动多个 Go 协程

通过下面的例子,可以观察到两个协程就如两个线程一样,并发执行:

代码语言:go
复制
package main

import (
	"fmt"
	"time"
)

func PrintNum(num int) {
	for i := 0; i < 3; i++ {
		fmt.Println(num)
		// 避免观察不到并发效果 加个休眠
		time.Sleep(100 * time.Millisecond)
	}
}

func main() {
	// 开启 1 号协程
	go PrintNum(1)
	// 开启 2 号协程
	go PrintNum(2)
	// 使主协程休眠 1 秒
	time.Sleep(time.Second)
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第 14 章 go 协程
    • 14.1 启动一个 go 协程
      • 14.2 启动多个 Go 协程
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档