groutine基本介绍
1.进程就是程序在 *** 作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。
2.线程是进程的一个执行实例,是程序执行的最小单位,是比进程更小的能独立运行的基本单位。
3.一个进程可以创建和销毁多个线程,同一个进程中的多个线程可以并发执行。
4.一个程序至少有一个进程,一个进程至少有一个线程。
并发和并行的区别(在cpu上的理解)
1.多线程程序在单核上运行就是并发
2.多线程程序在多核上运行就是并行
即:虽然从宏观上看都是同时执行,但是在微观上是不同的。
并发的特点:
1.多个任务作用在一个cpu
2.从微观的角度看,在一个时间点上,其实只有一个任务在执行
并行的特点:
1.多个任务作用在多个cpu
2.从微观的角度看,在一个时间点上,有多个任务在同时执行
3.这样看来并行的速度是要快的
在GO中:
Go的主线程(有的程序员直接称为线程,也可以理解为进程):在一个go线程上,
可以起多个协程,可以将协程理解为轻量级的线程。
Go协程的特点:
1.有独立的栈空间
2.共享程序堆空间
3.调度由用户控制
4.协程是轻量级的线程
协程即:goroutine
在主线程中可以跑很多很多的协程,成千上万个都没有问题
package main
import (
"fmt"
"strconv"
"time"
)
func test() {
for i := 1; i <= 10; i++ {
fmt.Println("test 中 hello" + strconv.Itoa(i))
time.Sleep(time.Second)
}
}
func main() {
//test() 输出为先test() 后main()
go test() //这样就开启了一个协程,
//输出为这个:
// main 中 hello1
// test 中 hello1
// test 中 hello2
// main 中 hello2
// main 中 hello3
// test 中 hello3
// test 中 hello4
// main 中 hello4
// main 中 hello5
// test 中 hello5
// test 中 hello6
// main 中 hello6
// main 中 hello7
// test 中 hello7
// test 中 hello8
// main 中 hello8
// main 中 hello9
// test 中 hello9
// test 中 hello10
// main 中 hello10
for i := 1; i <= 10; i++ {
fmt.Println("main 中 hello" + strconv.Itoa(i))
time.Sleep(time.Second)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)