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)
        }()
    }
}

 

posted @ 2020-08-03 18:51  欧-阳  阅读(158)  评论(0)    收藏  举报