goroutine 介绍

发布于:2024-11-11 ⋅ 阅读:(113) ⋅ 点赞:(0)

引子:

 

线程比如打开腾讯视频然后开始下载多个视频,下载任务就是线程

但是这并不是同时进行的,只是时间片比较短切换的比较快

 进程和线程的关系

有些程序可以多进程有些可能不支持

 并发和并行

并发和并行的根本区别是:并发在同一时间段内一起执行,而并行强调同一时刻开始执行 

 

 go协程和主线程(协程的特点)

 代码及输出效果:

package main

import (
	"fmt"
	"strconv"
	"time"
)

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

func main(){
	go text()
	for i:=1;i<=10;i++{
		fmt.Println("hello golang"+strconv.Itoa(i))
		time.Sleep(time.Second)
	}
}


//结果
//hello world1
//hello golang1
//hello golang2
//hello world2
//hello world3
//hello golang3
//hello golang4
//hello world4
//hello world5
//hello golang5
//hello world6
//hello golang6
//hello golang7
//hello world7
//hello world8
//hello golang8
//hello golang9
//hello world9
//hello world10
//hello golang10

小结 

1)主线程是一个物理线程,直接作用在CPU上的。是重量级的,非常耗费CPU资源。

2)协程从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小。

3)Golang的协程机制是重要的特点,可以轻松的开启上万个协程。其他编程语言的并发机制是一般基于现成的,开启3了过多的线程,资源耗费大,这里就很突显Golang在并发上的优势了。

goroutine的调度模型MPG模式基本介绍

1)M: 操作系统的主线程(是物理线程)比较耗费资源

2)P:协程执行需要的上下文

3)G:协程

相对静态的一种模式

 相对动态的一种模式(在协程阻塞的情况下会怎么处理)

设置Golang运行的cpu数

充分利用多CPU的优势,在Golang程序中,设置运行的cpu数目

runtime包

里面有两个比较重要的函数:

1)获取当前系统CPU的数量

num := runtime.NumCPU()

2)设置num-1的cpu运行go程序

runtime.GOMAXPROCS(num)

 


网站公告

今日签到

点亮在社区的每一天
去签到