【golang笔记】go_goroutine(22)

Page content

这一篇简单的整理了golang goroutine 相关的内容。

1.进程process和线程thread

一个任务就是一个进程(Process),
进程内的“子任务”称为线程(Thread)。

2.并行,并发

goroutine中
多线程在多核上运行是并行。
多线程在单核上运行是并发。

3.Go语言中协程和主线程的关系

Go语言中一个主线程可以启很多协程

协程的特点:

  • 有独立的栈空间
  • 共享程序堆空间
  • 调度由用户控制
  • 协程是轻量级的线程

4.GMP模型

可以参考之前写的文章
【go笔记】goroutine调度器的GMP模型简介

5.goroutine的简单实例

package main
import (
 "fmt"
 "strconv"
 "time"
)

func test() {
 for i := 1; i <= 10; i++ {
  fmt.Println("tesst () hello,world " + strconv.Itoa(i))
  time.Sleep(time.Second)
 }
}

func main() {

 go test() // 开启了一个协程

 for i := 1; i <= 10; i++ {
  fmt.Println(" main() hello,golang" + strconv.Itoa(i))
  time.Sleep(time.Second)
 }
}
$ go run main.go
 main() hello,golang1
tesst () hello,world 1
tesst () hello,world 2
 main() hello,golang2
 main() hello,golang3
tesst () hello,world 3
tesst () hello,world 4
 main() hello,golang4
 main() hello,golang5
tesst () hello,world 5
 main() hello,golang6
tesst () hello,world 6
 main() hello,golang7
tesst () hello,world 7
tesst () hello,world 8
 main() hello,golang8
tesst () hello,world 9
 main() hello,golang9
 main() hello,golang10
tesst () hello,world 10

欢迎大家的意见和交流

email: li_mingxie@163.com