go语言开发基础38 - 之go语言里的goroutine基本使用
Go语言最大的特色就是从语言层面支持并发(Goroutine),Goroutine是Go中最基本的执行单元。事实上每一个Go程序至少有一个Goroutine:主Goroutine。当程序启动时,它会自动创建。
为了更好理解Goroutine,现讲一下进程、线程和协程的概念
- 进程:进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。
- 线程:线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程可以创建和撤销多个线程,同一个进程中的多个线程之间可以并发执行。
- 携程:独立的栈空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程调度也是自己实现的。
并发和并行说明:
- 多线程程序在一个核的CPU上运行,就是并发
- 多线程程序在多个核的CPU上运行,就是并行
下面先来看一个go语言启动一个携程的例子:
package main import ( "fmt" "time" ) func test() { var i int for { fmt.Println(i) time.Sleep(time.Second) i++ } } func main() { go test() // 启动一个线程、这个线程和主线程是携程 for { fmt.Println("in main running...") time.Sleep(time.Second) } }
再go语言里启动一个线程跟简单,只需要再函数前面加上go就可以了,下面是用for循环启动多个线程的例子:
package main import "fmt" func main() { for i :=0; i < 10; i ++ { go func() { // 匿名函数启动线程 fmt.Println(i) }() } }

浙公网安备 33010602011771号