当前位置: 首页 > article >正文

goroutine 介绍

引子:

 

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

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

 进程和线程的关系

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

 并发和并行

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

 

 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)

 


http://www.kler.cn/a/388469.html

相关文章:

  • 前端开发中常用的包管理器(npm、yarn、pnpm、bower、parcel)
  • 《深度解析 C++中的弱引用(weak reference):打破循环依赖的利器》
  • 使用pdfjs加载多页pdf并实现打印
  • 分享一个傻瓜式一键启动的加速器
  • PostgreSQL 开启密码验证插件
  • vscode下nuget包的本地引入方法
  • 我爸瘫痪,我们三兄弟每月出2500让嫂子伺候,得知我工资10000,嫂子打电话:你多给1000行吗?...
  • lua脚本调用 c/c++中的接口
  • Spring Shell——快速构建终端应用,自定义终端命令
  • Maven的依赖管理、传递、冲突、父子工程的继承和聚合
  • 题目讲解15 合并两个排序的链表
  • 易语言加载dll模拟windows鼠标轨迹移动
  • 对于大根堆的计算时间复杂度的过程
  • 【模板】如何实现链表元素的反转
  • ClickHouse创建分布式表
  • 用Java实现samza转换成flink
  • linprog函数在octave中的使用
  • WPF中ImageBrush和Image的区别
  • 斐波那契数的第n个数代码分享(c基础)
  • 【如何使用 ADB 脚本批量停止 Android 设备上的所有应用】
  • 基于WebService的面向服务架构研究
  • 浅谈“通感一体”
  • el-table 表格索引不展示问题
  • Golang | Leetcode Golang题解之第556题下一个更大元素III
  • Facebook定位不准是什么原因?
  • 零基础入门进程间通信:task 1(匿名管道与vscode使用)