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

相关推荐

  1. go语言

    2024-06-12 15:48:01       8 阅读
  2. Go语言教程

    2024-06-12 15:48:01       5 阅读
  3. go语法10问

    2024-06-12 15:48:01       40 阅读
  4. go语言篇——接口

    2024-06-12 15:48:01       34 阅读
  5. GO语言核心30讲 技术

    2024-06-12 15:48:01       12 阅读
  6. GO语言核心30讲 技术 (第二部分)

    2024-06-12 15:48:01       11 阅读
  7. Go语言系统学习笔记(二):

    2024-06-12 15:48:01       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 15:48:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 15:48:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 15:48:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 15:48:01       20 阅读

热门阅读

  1. 图论第8天

    2024-06-12 15:48:01       6 阅读
  2. 讲解机器学习中的 K-均值聚类算法及其优缺点。

    2024-06-12 15:48:01       8 阅读
  3. 10、前后端本地端联调

    2024-06-12 15:48:01       8 阅读
  4. 处理element ui 表格中 按钮 loading问题

    2024-06-12 15:48:01       6 阅读
  5. 调料食品加工污水处理设备配置

    2024-06-12 15:48:01       5 阅读
  6. Spring-core-MethodParameter

    2024-06-12 15:48:01       6 阅读
  7. 手机照片怎么恢复?10个照片恢复应用程序

    2024-06-12 15:48:01       10 阅读
  8. 给echarts图表添加弧形动画效果

    2024-06-12 15:48:01       7 阅读
  9. PTA:7-184 通过嵌套循环输出二维矩阵

    2024-06-12 15:48:01       11 阅读
  10. Web前端模板引擎:深度解析与应用探索

    2024-06-12 15:48:01       12 阅读
  11. 一台 Linux 服务器最多能支撑多少个 TCP 连接

    2024-06-12 15:48:01       9 阅读
  12. wildcard邀请码

    2024-06-12 15:48:01       8 阅读