goroutine简介

goroutine的本质是协程,是实现并行计算的核心。goroutine使用方式非常的简单,只需使用go关键字+方法或者方法模块即可启动一个协程。并且它是处于异步方式运行,你不需要等它运行完成以后在执行以后的代码。

go func()//通过go关键字启动一个协程来运行函数

goroutine内部原理

概念介绍

在进行实现原理之前,了解下一些关键性术语的概念。

并发

一个cpu上能同时执行多项任务,在很短时间内,cpu来回切换任务执行(在某段很短时间内执行程序a,然后又迅速得切换到程序b去执行),有时间上的重叠(宏观上是同时的,微观仍是顺序执行),这样看起来多个任务像是同时执行,这就是并发。

并行

当系统有多个CPU时,每个CPU同一时刻都运行任务,互不抢占自己所在的CPU资源,同时进行,称为并行。

进程

进程是操作系统资源分配的最小单元。一个进程拥有的资源有自己的堆、栈、虚存空间(页表)、文件描述符等信息。 进程是操作系统对一个正在运行的程序的一种抽象,可以把进程看作程序运行的一次运行过程。

线程

线程是操作系统能够进行运算调度的最小单元。它被包含在进程中,是进程中实际运行的单位。一个进程中可以并发多个线程,每个线程执行不同的任务 。

虽然多进程也能实现并发编程,但是线程比进程更轻量。

协程

协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此,协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态。

调度模型简介

groutine能拥有强大的并发实现是通过GPM调度模型实现,下面就来解释下goroutine的调度模型。