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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值