go语音进阶 多任务

多任务

什么叫 多任务?简单说:就像是操作系统可以同时执行 多个任务。打个比方 你一边使用 浏览器上网,一遍在听MP3, 一边再用 word 赶作业。对于电脑来讲这就是多任务,还有很多任务悄悄的在后台同时运行着,只是桌面上没有显示

什么是并发:

Go 是并发语言,而不是并行语言。在讨论如何在 Go中进行并发处理之前。我们首先必须了解什么是并发。以及它 与 并行有什么不同。

并发性 Concurrency 是同时处理许多事情的能力。

例如:一个人在晨跑,在晨跑时 他的鞋带松了 现在这个人停止跑步, 系鞋带  然后再继续跑步。同一时间点只能做一个任务,你不能边跑步变 边系鞋带,这就是一个并发性的例子。这个人是能够同时处理跑步和 系鞋带。这是一个人 能够同时处理很多事情。但是同一时刻只能做一件

 

什么是 并行性 parallelise,它与 并发性 concurrency 有什么不同?

  • 并行性就是同时做很多事情,这听起来感觉和 并发类似,但是还是有区别的。让我们继续以 慢跑的例子理解她, 在这种情况下:我们假设这个人再慢跑  并且再使用它的手机在听音乐,在这种情况下:一个人边跑步 边听音乐 那就是它同时在做很多事情 同时进行。同一个时刻点 可以做多件事情。 这就是所谓的并行性。(parallelism)

并发性 和 并行性 一种技术上的观点

        假设我们正在编写 一个web 浏览器。 web浏览器有各种组件。其中两个是 web 页面呈现区域 和 下载文件 从 internet 下载的下载器。假设我们以这种方式构建了 浏览器代码。这样每个组件都可以 独立的执行。当这个浏览器运行在 单核心的处理器上面的时候,处理器将在浏览器的两个组件 之间进行上下文切换。它可能会下载一个文件一段时间,然后它可能会切换到呈现用户请求的网页 html. 这就是所谓的 并发性。 并发从不同的时间开始,他们执行周期重叠,在这种情况下 下载和呈现从不同时间点开始。他们执行重叠。

假设同一浏览器在多核心的处理器上运行,这种情况下,文件下载 和 html 呈现组件在不同的核心中运行 这就是所谓的 并行性

  •  并发性:利用 cpu 时间片 接替执行 看起来像是同时执行,实际上同一时刻只能做一件事情,就像 上面  边跑步  -> 系鞋带 -> 跑步
  •  并行性:利用 多核CPU  同一时刻 同时干多件事情, 上面跑步 和 听音乐 同时进行

并行性 Parallelise 不会总是会更快(按照业务选择)。因为并行运行的组件如果通常需要相互通信,就需要等待等等的 操作也会使 并行的效率降低。

串行 并行 并发

 时间片:

  • 串行:依次执行
  • 并行: 多核心同时执行 同一时间点 可以有多个
  • 并发:轮流 切换执行, 同一时间点 就有一个在执行

进程 线程 协程

进程(process) 线程(Thread) 协程(Coroutine, 也叫轻量级线程)

 

进程:

进程是一个独立在一个数据集中的一次动态执行过程,可以简单理解为 “正在执行的程序。 他是CPU资源分配和调度的独立单位。进程一般由程序,数据集,进程控制块三部分组成。我们编写的程序用来描述 进程要完成那些功能 以及如何完成;数据集则是程序在执行过程中需要使用的资源; 进程控制块用来记录程序外部特征。描述进程的执行变化过程。系统可以利用他来控制和管理进程,他是系统感知进程的唯一标志。 进程的局限是创建 撤销 和 切换 的 开销很大

线程:

线程实在进程之后被发展出来的的概念。线程也叫轻量级进程。 他是一个基本的 cpu 执行单元。也是程序执行中的最小单元, 线程由 线程ID  程序计数器, 集成器集合 和 堆栈共同组成。一个进程可以包含多个线程,一般会有一个主线程。 线程的有点是见笑了程序并发执行时的开销,提高了操作系统的并发性能。缺点是 线程没有自己系统的资源,只拥有在运行时必不可少的资源。 但同一个进程的各种线程 可以共享进程的所有系统资源,如果把进程比作一个车间,那么线程就好比是车间的 工人,不过对于某些独占性的资源存在锁的机制,处理不当可能会死锁。

 

协程:

协程是一种用户态的轻量级线程,又称为 微线程 英文名称Coroutine, 协程的调度完全是由用户控制。人们常常将协程和子线程 对比

  • 子线程调度是一个入口一次返回 一旦退出即完成了子线程的执行
  • 于传统的 系统线程和进程相比,协程的最大优势在于其 "轻量级"。 可以轻松创建上百万个而不会导致系统资源衰竭。而线程和进程通常最多不能超过 1万的,这也是协程被称为轻量级线程的原因。
协程于多线程相比优势在于:

       协程执行效率高,因为子程序切换不是线程切换,而是由本身程序控制,因此没有线程切换的开销 和 多线程比 线程数量越多 协程的性能优势越明显。

 

Go语言的并发是靠 协程 实现的 即 Goroutine

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

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

相关文章

【Ardiuno】实验使用ESP32单片机连接Wifi(图文)

ESP32单片机最为精华和有特色的地方当然是wifi连接,这里我们就写程序实验一下适使用ESP32主板连接wifi,为了简化实验我们这里只做了连接部分,其他实验在后续再继续。 由于本实验只要在串口监视器中查看结果状态即可,因此电路板上…

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载 iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoia-boot-iso/,查看最新版…

如何有效释放Docker占用的存储空间

随着Docker的广泛应用,我们经常会遇到Docker占用过多存储空间的问题。这可能是由于频繁的镜像拉取、容器创建和删除等操作导致的。本文将介绍几种方法来有效释放Docker占用的存储空间,特别是docker system prune命令的使用。 Docker的存储机制 Docker使…

springboot连接多个库

一个SpringBoot项目,同时连接两个数据库:比如一个是Mysql数据库,一个是oracle数据库(啥数据库都一样,连接两个同为oracle的数据库,或两个不同的数据库,只需要更改对应的driver-class-name和jdbc…

【C++】list 容器的增删改查---模拟实现(图例超详细解析!!!)

目录 一、前言 二、 list 容器的模拟实现思 ✨ 模块分析 ✨ 作用分析 三、list的节点类设计 四、list 的迭代器类设计 ⭐ 迭代器类--存在的意义 ⭐ 迭代器类--模拟实现 💦 模板参数 和 成员变量 💦 构造函数 💦 运算符的重载 &…

HyperBDR新版本上线,自动化容灾兼容再升级!

本次HyperBDR v5.5.0版本新增完成HCS(Huawei Cloud Stack)8.3.x和HCSO(Huawei Cloud Stack Online)自动化对接,另外还突破性完成了Oracle云(块存储模式)的自动化对接。 HyperBDR,云原生业务级别容灾工具。支…

PS教程系统17

橡皮擦工具 主要配合画笔工具来使用 选择画笔工具新建图层试验擦除线条 如果直接在背景图片上进行擦除 会有背景颜色补充 背景橡皮擦 将其白色背景擦除掉shift相关键,进行工作区域切换吸取样点一次采样、两次采样连续、不连续等功能 在进行涂擦的过程一…

Unity EasyRoads3D插件使用

一、插件介绍 描述 Unity 中的道路基础设施和参数化建模 在 Unity 中使用内置的可自定义动态交叉预制件和基于您自己导入的模型的自定义交叉预制件,直接创建独特的道路网络。 添加额外辅助对象,让你的场景栩栩如生:桥梁、安全护栏、栅栏、墙壁…

RawChatGPT:公益大模型使用网站

文章目录 一、Rawchat介绍二、使用教程三、案例应用3.1 图片内容分析3.2 生图演示3.3 文档解析 一、Rawchat介绍 RawChat为用户提供了更为便捷的使用方式。 二、使用教程 RawChat公益站点链接:https://ChatGPTplus.cn 进入后,我们只需要点击&#xf…

基于Java+Swing+mysql幼儿园信息管理系统V2

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

深入理解rtmp(三)之手把手实现握手协议

RTMP是基于TCP协议的应用层协议,默认通信端口1935.实现握手协议前先了解一下rtmp握手协议吧!!! 握手过程 要建立一个有效的RTMP Connection链接,首先要“握手”:客户端要向服务器发送C0,C1,C2(按序)三个chunk,服务器向客户端发送…

Linux1(介绍与基本命令)

目录 一、初始Linux 1. Linux的起源 2. Linux是什么? 3. Linux内核版本 4. Linux的应用 5. 终端 6. Shell 7. Linux目录结构 二、基本命令 1. 基本的命令格式 2. shutdown 关机命令 3. pwd 当前工作目录 4. ls 查看目录内容 5. cd 改变工作目录 …

揭秘速卖通API接口:打破电商边界,用代码驱动全球业务增长

速卖通(AliExpress)通常指的是阿里巴巴集团旗下的国际零售电商平台。然而,直接通过API接口与速卖通进行交互通常涉及阿里巴巴的开放平台(Open Platform)和相关API。由于API的具体细节、认证方式、请求参数和返回值可能…

六种图算法的python实现

六种图算法的python实现 1. Prim 算法 基本原理 Prim算法是一种求解最小生成树的贪心算法。所谓最小生成树,就是对于给定的连通图,找到一棵包含所有顶点的树,且树上所有边的权重之和最小。Prim算法从一个顶点开始,每次选择与当…

数据丢失?揭秘easyrecovery破解版下载安装步骤教程,一键恢复!

“我不小心把硬盘里的重要文件删了,怎么都找不到了!” “电脑突然崩溃了,所有的数据都没了,怎么办?” 这些情况是不是让你感到绝望?不过别担心,EasyRecovery数据恢复软件可以帮你轻松解决这些问…

[office] excel表格中双击鼠标左键有什么快捷作用- #经验分享#媒体

excel表格中双击鼠标左键有什么快捷作用? excel表格中双击鼠标左键有什么快捷作用?不要小看鼠标左键双击的作用,在excel中双击鼠标左键可以实现六个功能,提高工作效率,到底是那六个功能呢?请看下文详细介绍 在表格中…

R语言绘图 --- 桑基图(Biorplot 开发日志 --- 5)

「写在前面」 在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…

React基础教程:TodoList案例

todoList案例——增加 定义状态 // 定义状态state {list: ["kevin", "book", "paul"]}利用ul遍历list数组 <ul>{this.state.list.map(item ><li style{{fontWeight: "bold", fontSize: "20px"}} key{item.i…

MoE大模型大火,AI厂商们在新架构上看到了什么样的未来?

文 | 智能相对论 作者 | 陈泊丞 很久以前&#xff0c;在一个遥远的国度里&#xff0c;国王决定建造一座宏伟的宫殿&#xff0c;以展示国家的繁荣和权力。他邀请了全国最著名的建筑师来设计这座宫殿&#xff0c;这个人以其卓越的才能和智慧闻名。 然而&#xff0c;这位建筑师…

Apollo9.0 PNC源码学习之Control模块(三)

本文将对Apollo的纵向控制器进行讲解&#xff0c;看完本文&#xff0c;你将会对百度Apollo的纵向控制有更深的理解 前面文章&#xff1a; Apollo9.0 PNC源码学习之Control模块&#xff08;一&#xff09; Apollo9.0 PNC源码学习之Control模块&#xff08;二&#xff09; 1 纵向…