并发性Concurrency概念
# 并发性Concurrency
概念
# 一、多任务
其实是指操作系统可以同时执行多个任务.
# 二、什么是并发
Go
是并发语言,二部是并行语言.在讨论如何在Go
中进行并发处理之前,首先必须了解什么是并发,以及它与并发性有什么不同.(Go is a concurrency language and not a parallel one)
并发性Concurrency
是同时处理许多事情的能力
什么是并行性parallelism
,它于并发concurrency
有什么不同?并行就是同时做很多事情.这听起来可能与并发类似,但实际上是不同的.
假设一个人在跑步,并且使用他的手机听音乐.这种情况下,这个人一遍跑步一遍听音乐,同时在做很多事情.这就是所谓的并行性(parallelism)
并发性和并行性---- 一种技术上个观点.假设正在编写一个web
浏览器.web
浏览器有各种组件.其中两个是web
页面呈现区域和下载文件从internet
下载的下载器.假设以这种方式构建了浏览器的代码,这样每个组件都可以独立地执行.当这个浏览器运行在单个核处理器中时,处理器将在浏览器的两个组件之间进行上下文切换.它可能会下载一个文件一段时间,然后可能会切换到呈现用户请求的页面的html
.这就是所谓的并发性.并发进程从不同的时间点开始,它们的执行周期重叠.在这种情况下,下载和呈现从不同的时间点开始,它的执行重叠.
假设同一浏览器运行在多核处理器上.在这种情况下,文件下载和HTML
呈现组件可能同时在不同的内核中运行.这就是所谓的并行性.
并行性Parallism
不会总是导致更快的执行时间.这是因为并行运行的组件可能需要相互通信.例如,在浏览器中,当下载完成时,应该将其传递给用户,比如使用弹出窗口.这种通信发生在负责下载的组件和负责呈现用户界面的组件之间.这种通信开销在并发concurrent
系统中很低.但组件在多个内核中并行concurrent
运行时,这种通信开销很高.因此,并行程序并不总是导致更快的执行时间.
# 三、进程、线程、协程
进程(Process)
、线程(Thread)
、协程(Coroutine,也叫轻量线程)
进程 进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为"正在执行的程序",它是CPU
资源分配和调度的独立单位.进程一般由程序、数据集、进程控制块三部分组成.在编写程序用来描述要完成哪些功能以及如何完成;数据集则是程序执行过程中所需要使用的资源;进程空间块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志.进程吧局限是创建、撤销和切换的开销比较大
线程 线程是在进程之后发展出来的概念.线程也叫轻量级进程,它是一个基本的CPU
执行单元,也是程序执行过程中的最小单元,由线程ID
、程序计数器、寄存器集合和堆栈共同组成.一个进程可以包含多个线程.线程的优点是减小了程序并发执行时的开销,提高了操作系统的并发性能,缺点是线程没有自己的系统资源,只拥有在运行时必不可少的资源,但同一进程的各线程可以共享进程所拥有的系统资源,如果把进程比作一个车间,那么线程就好比是车间里面的工人.不过对于某些独占性资源存在锁机制,处理不当可能会产生"死锁"
协程 协程是一种用户态的轻量级线程,又称微线程,英文名字Coroutine
,协程的调用完全由用户控制.人们通常将协程和子程序(函数)比较着好理解.子程序总是一个入口,一次返回,一旦退出即完成了子程序的执行.
比起传统的系统线程和进程相比,协程的最大优势在于其"轻量级",可以轻松创建上百万个而不会导致系统资源衰竭,而线程和进程通常最多也不能超过1万的.这也是协程也叫轻量级线程的原因.
协程与多线程相比,其优势体现在: 协程的执行效率极高.因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显.
Go语言对于并发的实现靠协程,Goroutine
- 01
- AWS NAT-NetWork-Firwalld配置(一)04-09
- 02
- AWS NAT-NetWork-Firwalld配置(二)04-09
- 03
- kubernetes部署minio对象存储01-18