goroutine基础

本文介绍了Golang中的goroutine,一种轻量级线程。goroutine相比线程,上下文切换成本低,使用CSP并发模型,通过goroutine和channel进行数据共享。文章详细讨论了goroutine与线程的关系、调度策略,包括MPG模型、调度器初始化、goroutine的创建、调度和停止。此外,还涉及了goroutine的停止场景,如runtime.park和runtime.gosched。
摘要由CSDN通过智能技术生成

一、goroutine是什么?
是go里的一种轻量级线程-协程

1、相对线程,协程的优势在于它非常轻量级,进行上下文切换的代价非常小

2、相对于一个goroutine,每个结构中有一个sched的属性就是用来保存它上下文的,这样,goroutine就可以很轻易的来回切换

3、由于其上下文切换在用户态下发生,根本不必进入内核态,所以速度很快。而且只有当前goroutine的pc,sp等少量信息需要保存

4、在go语言中,每一个并发的执行单元为一个goroutine

go语言中的goroutine并发,采用的是CSP(communicating sequential processes)并发模型,讲究的是以通讯的方式来进行数据共享,是通过goroutine配合channel的方式来实现的。

二、既然它是比线程还小的粒度,那么它与线程有什么关系?

go语言的线程模型就是一种特殊的两级线程模型,如下图所示:

两级线程模型的实现非常复杂,和内核级线程模型类似,一个进程中可以对应多个内核级线程,但是进程中的线程不和内核线程一一对应;这种线程模型会先创建多个内核级线程,然后用自身的用户级线程去对应创建的多个内核级线程,自身的用户级线程需要本身去调度,内核级的线程交给操作系统内核去调度

三、goroutine的调度策略

1、介绍一下go线程实现的MPG模型:

S(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值