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)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/913246.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AlphaProof IMO 2024 P1 in LEAN 之 简介

AlphaProof 是用于进行数学证明的人工智能&#xff0c;其中&#xff0c;对于 IMO 2024 中的6道题中的 4 道。本系列博文&#xff0c;就 AlphaProof 对于 IMO 2024 P1 给出的答案进行详细讲述。这里是此系列的第一篇。 IMO 2024 P1 题目如下&#xff1a; IMO 2024 P1 答案 α 为…

Android Framework AMS(11)广播组件分析-2(注册/注销流程解读)

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读广播组件的动态注册/注销过程及静态注册过程。关注思维导图中左上侧部分即可。 有了前面startActivity流程和service组件启动流程分…

Llamaindex RAG 实践

大模型支持的最强大的应用程序之一是复杂的问答聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 &#xff08;RAG&#xff09; 的技术。 1. 什么是RAG&#xff1f; 当你需要给模型注入新的知识时&#xff0c;有两种方法&#xf…

C#基础入门--类的建立与使用

上周刚开C#&#xff0c;这门课&#xff0c;第一节课就感觉不对劲了&#xff0c;感觉跟java很像(上图C#&#xff0c;下图java),进来页面都差不多&#xff1a; 这里介绍以下我C#的第一个程序&#xff0c;以类的思想定义一个student类&#xff0c;用户输入类中的属性信息后&#x…

LangChain Ollama实战文献检索助手(二)少样本提示FewShotPromptTemplate示例选择器

本期是用样例来提示大模型生成我们想要的答案。即在输入中给定提示的样例&#xff0c;以及提示模板&#xff0c;然后匹配较相关的样例进行文献综述。 创建示例样本FewShotPromptTemplate 这里我用GTP-o1生成了几个回答&#xff0c;作为样本 samples [{"theme": &…

GNN系统学习:简单图论、环境配置、PyG中图与图数据集的表示和使用

Reference datawhale开源学习资料 开篇 1.1 为什么要在图上进行深度学习&#xff1f; 在过去的深度学习应用中&#xff0c;我们接触的数据形式主要是这四种&#xff1a;矩阵、张量、序列&#xff08;sequence&#xff09;和时间序列&#xff08;time series&#xff09;。然…

嵌入式面试八股文(六)·ROM和RAM的区别、GPIO的八种工作模式、串行通讯和并行通讯的区别、同步串行和异步串行的区别

目录 1. ROM和RAM的区别 2. GPIO的八种工作模式 3. 串行通讯和并行通讯的区别 3.1 串行通讯 3.2 并行通讯 3.3 对比 4. 同步串行和异步串行的区别 4.1 时钟信号 4.2 数据传输效率 4.3 应用场景 4.4 硬件复杂性 1. ROM和RAM的区别 ROM&#xff08;Read-O…

批量缓存模版

批量缓存模版 缓存通常有两种使用方式&#xff0c;一种是Cache-Aside&#xff0c;一种是cache-through。也就是旁路缓存和缓存即数据源。 一般一种用于读&#xff0c;另一种用于读写。参考后台服务架构高性能设计之道。 最典型的Cache-Aside的样例&#xff1a; //读操作 da…

Vue3学习笔记(上)

Vue3学习笔记&#xff08;上&#xff09; Vue3的优势&#xff1a; 更容易维护&#xff1a; 组合式API更好的TypeScript支持 更快的速度&#xff1a; 重写diff算法模板编译优化更高效的组件初始化 更小的体积&#xff1a; 良好的TreeShaking按需引入 更优的数据响应式&#xf…

SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记

这是一篇港科大学生在google research 实习期间发在ECCV2024的语义引导生成式修复的文章&#xff0c;港科大陈启峰也挂了名字。从首页图看效果确实很惊艳&#xff0c;尤其是第三行能用文本调控修复结果牌上的字。不过看起来更倾向于生成&#xff0c;对原图内容并不是很复原&…

Knowledge Graph-Enhanced Large Language Models via Path Selection

研究背景 研究问题&#xff1a;这篇文章要解决的问题是大型语言模型&#xff08;LLMs&#xff09;在生成输出时存在的事实不准确性&#xff0c;即所谓的幻觉问题。尽管LLMs在各种实际应用中表现出色&#xff0c;但当遇到超出训练语料库范围的新知识时&#xff0c;它们通常会生…

常见计算机网络知识整理(未完,整理中。。。)

TCP和UDP区别 TCP是面向连接的协议&#xff0c;发送数据前要先建立连接&#xff1b;UDP是无连接的协议&#xff0c;发送数据前不需要建立连接&#xff0c;是没有可靠性&#xff1b; TCP只支持点对点通信&#xff0c;UDP支持一对一、一对多、多对一、多对多&#xff1b; TCP是…

HashMap(深入源码追踪)

一篇让你搞懂HashMap的几个最重要的知识点,往源码跟踪可以让我们很轻松应对所谓的一些八股面试题. 一. 属性解释 先来解释HashMap中重要的常量属性值 DEFAULT_INITIAL_CAPACITY : 默认初始化容量,也就是如果不指定初始化的Map存储容量大小,默认生成一个存储16个空间的Map集合…

MySQL中的事务与锁

目录 事务 InnoDB 和 ACID 模型 原⼦性的实现 持久性的实现 ​隔离性的实现 锁 隔离级别 ​多版本控制(MVCC) 事务 1.什么是事务? 事务是把⼀组SQL语句打包成为⼀个整体&#xff0c;在这组SQL的执⾏过程中&#xff0c;要么全部成功&#xff0c;要么全部失败&#…

C#开发基础:WPF和WinForms关于句柄使用的区别

1、前言 在 Windows 应用程序开发中&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;和 WinForms&#xff08;Windows Forms&#xff09;是两种常见的用户界面&#xff08;UI&#xff09;框架。它们各自有不同的架构和处理方式&#xff0c;其中一个显…

基于.NET开源、功能强大且灵活的工作流引擎框架

前言 工作流引擎框架在需要自动化处理复杂业务流程、提高工作效率和确保流程顺畅执行的场景中得到了广泛应用。今天大姚给大家推荐一款基于.NET开源、功能强大且灵活的工作流引擎框架&#xff1a;elsa-core。 框架介绍 elsa-core是一个.NET开源、免费&#xff08;MIT License…

.NET6中WPF项目添加System.Windows.Forms引用

.NET6中WPF项目添加System.Windows.Forms引用 .NET6的WPF自定义控件默认是不支持System.Windows.Forms引用的&#xff0c;需要添加这个引用方法如下&#xff1a; 1. 在项目浏览器中找到项目右击&#xff0c;选择编辑项目文件&#xff08;Edit Project File&#xff09;。 …

16.UE5拉怪机制,怪物攻击玩家,伤害源,修复原视频中的BUG

2-18 拉怪机制&#xff0c;怪物攻击玩家、伤害源、黑板_哔哩哔哩_bilibili 目录 1.实行行为树实现拉怪机制 1.1行为树黑板 1.2获取施加伤害对象&#xff08;伤害源&#xff09; 2.修复原视频中&#xff0c;第二次攻击怪物后&#xff0c;怪物卡在原地不动的BUG 3.怪物攻击玩…

<项目代码>YOLOv8 草莓成熟识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

Vue全栈开发旅游网项目(9)-用户登录/注册及主页页面开发

1.用户登录页面开发 1.查询vant组件 2.实现组件模板部分 3.模型层准备 4.数据上传 1.1 创建版权声明组件Copyright 新建文件&#xff1a;src\components\common\Copyright.vue <template><!-- 版权声明 --><div class"copyright">copyright xx…