go语音进阶 多任务

news2024/11/19 20:39:14

多任务

什么叫 多任务?简单说:就像是操作系统可以同时执行 多个任务。打个比方 你一边使用 浏览器上网,一遍在听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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm 添加 electron 安装镜像变量,提交打包速度。

前言:项目中使用 electron-builder,打包运行 npm run build:win 时, electron-builder 默认会从 github 下载 electron 依赖包,导致打包缓慢。可以通过添加 electron 下载镜像地址来解决。 npm config ls -l 查看 npm 所有配置 …

SmartEDA:革新教育电路,点亮学生创新之光!

在当今快速发展的科技时代,电路设计与电子技术的融合已成为教育领域不可或缺的一部分。而SmartEDA作为一款新兴的电路设计工具,正以其独特的优势助力学生创新实践,引领教育界迈向更加智能化的未来。 SmartEDA不仅具备传统电路设计软件的基本…

Redis(十六) 集群

文章目录 前言什么是集群集群模式基本原理哈希求余一致性哈希算法哈希槽分区算法 docker模拟出一个集群集群中节点挂了会怎么办故障判定故障迁移 集群扩容 前言 前面我们学习了 redis 哨兵机制,哨兵机制是为了解决当主节点挂了之后,能够自动进行故障转移…

JVM对象分配和垃圾回收机制

一、对象创建 1.1 符号引用 new 创建一个对象,需要在JVM创建对象。 符号引用:目标对象采用一个符号表示,类A加载的时候,如果成员变量类B还没有被加载进来,采用一个符号(字面量)来表示&#x…

Linux C语言:指针的运算

一、指针的算术运算 1、指针运算 指针运算是以指针所存放的地址作为运算量而进行的指针运算的实质就是地址的计算 2、指针的算数运算 指针加上整数,指针减去整数, 指针递增,指针递减和两个指针相减。 指针加减一个n的运算: px n px - n 移动步长…

LeetCode | 2879.显示前三行

在 pandas 中,可以使用 head() 方法来读取 DataFrame 的前几行数据。如果想读取指定数量的行,可以在 head() 方法中传入一个参数 n,读取前 n 行 import pandas as pddef selectFirstRows(employees: pd.DataFrame) -> pd.DataFrame:retur…

mybatisplus(原理)使用方法引用的形式获取实体类对应数据库的列名

我们现在正常来看 一个mybatisplus正常的查询语句 我们可以看到 ,再如上的代码中 我们使用了 Address::getuserId 方法引用,但是我们把方法引用改成lambda表达式的形式的时候不会报错,但是运行的时候报错。为什么…

Tkinter 组件详解之Entry

Tkinter 组件详解之Entry Entry(输入框)组件通常用于获取用户的输入文本。 何时使用 Entry 组件? Entry 组件仅允许用于输入一行文本,如果用于输入的字符串长度比该组件可显示空间更长,那内容将被滚动。这意味着该字符串将不能被全部看到(你可以用鼠标或键盘的方向键调…

[2024-06]-[大模型]-[DEBUG]- ollama webui 11434 connection refused

报错:host.docker.internal:11434 ssl:default [Connection refused] 将/etc/systemd/system/ollama.service中加上如下红框两行 Environment"OLLAMA_HOST0.0.0.0" Environment"OLLAMA_ORIGINS*"然后 systemctl daemon-reload systemctl rest…

速卖通测评攻略:轻松提升店铺曝光度和吸引力

在速卖通平台上,产品排名,店铺曝光的提升无疑是所有卖家追求的目标,因为这直接关联着产品曝光量的增加和潜在销售机会的扩大。然而,提升产品排名并非一蹴而就,它需要一系列的策略和技巧。那么,接下来就让我…

【网络安全】跨站脚本攻击漏洞—HTML前端基础

目录 一、HTML概述 1.1 head部分 1.2 body部分 1.3 HTML特殊符号 二、JavaScript概述 2.1 HTML中JavaScript的存在方式 2.2 DOM操作 2.3 BOM操作 跨站脚本攻击(Cross-site scripting,通常缩写为XSS)是一种常见的网络安全漏洞&#xff…

区块链实验室(36) - 交叉编译Ethereum的客户端全套工具

停滞了一段时间,重新回到区块链实验。前面在“区块链实验室(31) - 交叉编译Ethereum的客户端Geth”中仅编译出客户端工具geth。编译Ethereum全套工具的代码如下。 #!/bin/bash ## abigen CGO_ENABLED0 GOOSlinux GOARCHarm64 /usr/local/go/bin/go build -ldflags …

成都跃享未来教育抖音小店深度解析靠谱与否

在如今网络购物日益繁荣的时代,抖音小店以其独特的平台优势和庞大的用户基础,吸引了越来越多的商家入驻。成都跃享未来教育咨询有限公司便是其中之一,它的抖音小店究竟靠不靠谱呢?今天,我们就来一起揭开这个谜底。 首…

现货黄金交易多少克一手?国内外情况大不同

如果大家想参与国际市场上的现货黄金交易,就应该从它交易细则的入手,先彻底认识这个品种,因为它是来自欧美市场的投资方式,所以无论是从合约的计的单位,计价的货币,交易的具体时间,以及买卖过程…

乡村振兴的多元化产业发展:推动农村一二三产业融合发展,培育乡村新业态,打造多元化发展的美丽乡村

一、引言 乡村振兴是我国当前及未来一段时间内的重大战略任务,旨在促进农村经济的全面发展,提高农民的生活水平,实现城乡融合发展。在乡村振兴的进程中,推动农村一二三产业融合发展,培育乡村新业态,是打造…

linux安装anconda后,之前的python环境如何加载到anconda环境中

一、问题描述 由于某种原因,我们需要在系统中安装多个环境,我们自然想到安装anconda来解决这个问题。但是当我们安装好anconda后,发现我们未安装anconda之前的python环境使用不了了。那么我们如何将之前的python环境放到conda 环境中呢。 二…

7种常用数据分析方法,建议收藏学习(下)

在上一篇内容里,我们提到了常用的数据分析放法,比如:漏斗分析法、留存分析法、分组分析法、矩阵分析法。没有看到的上篇推送的小伙伴可以回过头去查看我们之前的推送。 今天,我们继续讲后面的内容:关联分析法、指标分…

SpringBoot快速部署(2)—不使用docker的常规方法

一、软件下载和部署前准备 安装软件 获取软件安装包 然后上传到服务器的 /tmp 目录下。 软件:nginx、jdk、mysql 下载 X-shell 和 Xftp 注意:这个页面下载安装的才可以免费使用。家庭/学校免费 - NetSarang Website 安装jdk 1.8 tar -zxvf /tmp/jdk-…

程序猿大战Python——容器——字符串

字符串介绍 什么是Python容器 目标:了解Python容器是什么? 在现实生活中,我们知道容器是用来存放东西的,比如实验室里的烧杯等。 类似的,在Python中的容器是用来存放数据的。 与此同时,为了操作方便&…

springboot与flowable(3):启动、审批、各个Service服务

一、启动流程 流程定义与实例的关系类似于Java的类与对象,通过定义的id创建流程实例,编写测试代码: package org.example.flowabledemo2;import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInst…