线程 进程 协程 主线程 goroutine golang中怎么开启一个协程

线程 进程 协程 主线程 goroutine golang中怎么开启一个协程,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/995280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存