Go语言并发技术详解
有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而Go从语言层面就支持了并行。
goroutine
goroutine是Go并行设计的核心。goroutine说到底其实就是线程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便。
goroutine是通过Go的runtime管理的一个线程管理器。goroutine通过go关键字实现了,其实就是一个普通的函数。
gohello(a,b,c)
通过关键字go就启动了一个goroutine。我们来看一个例子
packagemain
import( "fmt" "runtime" )
funcsay(sstring){ fori:=0;i<5;i++{ runtime.Gosched() fmt.Println(s) } }
funcmain(){ gosay("world")//开一个新的Goroutines执行 say("hello")//当前Goroutines执行 }
//以上程序执行后将输出: //hello //world //hello //world //hello //world //hello //world //hello