加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

关于go语言中的协程相关知识点总结(一)

发布时间:2022-11-03 14:00:42 所属栏目:Unix 来源:未知
导读: 在实际开发中unix线程切换,经常会使用到go协程来处理一些耗时的操作,今天有时间把工作中遇到的知识点和一些坑记录下来,分享出来,先从简单的说起 吧
关于进程,线程和GO协程
程序:它是一个文

在实际开发中unix线程切换,经常会使用到go协程来处理一些耗时的操作,今天有时间把工作中遇到的知识点和一些坑记录下来,分享出来,先从简单的说起 吧

关于进程,线程和GO协程

程序:它是一个文件,其中包含用于初始化 进程的指令和用户数据部分的指令和数据

进程:它是包含计算机指令,用户数据和系统数据的程序执行环境,以及包含其运行时获得的其他类型资源

线程:它相对于进程是更加小巧而轻量的实体,线程由进程创建且包含自己的控制流和栈,区别:进程是正在 运行的二进程文件,而线程是进程的子集

Goroutine是Go程序并发执行的最小单元,它生活在Unix进程的线程中,优点非常轻巧,上下文切换非常快

关于Go调试器

Go运行时使用的自己的调度程序,与Unix内核调度程序不一样,Go调度器使用称为m:n的调度技术负责执行Goroutine,这个模型叫MPG调度模式. M可以理解为系统中线程,P可以理解为运行时的上下文环境,G可以认为是go协程

这里不细说了,网上有好多关于MPG模型的文章,可以好 好看看就懂了

创建Goroutine协程

使用go关键字就可以开启一个协程

package main
import (
	"flag"
	"fmt"
	"sync"
    "time"
)
func function()  {
	for i := 0; i < 10; i++ {
		fmt.Println(i)
	}
	fmt.Println()

unix线程切换_线程切换是中断吗_线程 线程池

} func main(){ go function() //也可可使用匿名函数创建 go func(){ fmt.Println("匿名函数输出") }()//这里不要忘记小括号的调用!!!! //这里为了防止主进程退出,才睡了一秒,下面有解决方案 time.Sleep(time.Second) }

优雅的关闭goroutine协程

上面的通过time.Sleep()来实现,这是在工作中 不合理的,原因是我们不知道协程执行完成需要多长时间,所以这种方式不合适,下面这种才是在工作中推荐的

package main
import (
	"flag"
	"fmt"
	"sync"
	"time"
)
func function()  {
	for i := 0; i 
	fmt.Println()
}
//通过定义一个sync.WaitGroup变量
var waitgroup sync.WaitGroup
func main() {
	time.Sleep(time.Second)
	n :=flag.Int("n",20,"线程数")
	flag.Parse()
	count :=*n
	fmt.Printf("启动%d个goroutines", count)
	
	for i := 0; i 

由于篇幅原因,先记录这些,下一篇继续 分享 关于go协程中通信channel(通道)的知识点关注我 不迷路!!!!!!关注我 不迷路!!!!!!关注我 不迷路!!!!!!

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章