并发编程基本概念
学习并发编程之前我们需要脑补几个基础知识和思考一个问题
- 什么是串行?
- 什么是并行?
- 什么是并发?
- 什么是程序?
- 什么是进程?
- 什么是线程?
- 什么是协程?
什么是串行?
串行就是按顺序执行,就好比银行只有1个窗口,有3个人要办事,那么必须排队,只有前面的人办完走人,才能轮到你
在计算机中, 同一时刻,只能有一条指令,在一个CPU上执行,后面的指令必须等到前面指令执行完才能执行,就是串行
什么是并行?
并行就是同时执行,就好比银行有3个窗口,有3个人要办事,只需要到空窗口即可立即办事。
在计算机中,同一时刻,有多条指令,在多个CPU上执行,就是并行
从以上分析不难看出,并行的速度优于串行
什么是并发?
并发是伪并行,就好比银行只有1个窗口,有3个人要办事,那么没轮到后面的人时,后面的人可以用拖鞋先排队,去吃个早餐,买个东西啥的,感觉差不多要到自己时再回来办事
在计算机中,同一时刻,只能有一条指令,在一个CPU上执行,但是CPU会快速的在多条指令之间轮询执行就是并发
并行和并发的区别就好比古代的三妻四妾(名正言顺,光明正大)和现代三妻四妾(抽空幽会,小三小四)
总结
- 多线程程序在单核上运行,就是并发
- 多线程程序在多核上运行,就是并行
什么是程序?
程序
是指将编译型语言
编写好的代码通过编译工具编译之后存储在硬盘
上的一个二进制文件
,会占用磁盘空间,但不会占用系统资源
- 例如我们通过 C++ 编写了一个聊天程序,然后通过 C++ 编译器将编写好的代码编译成一个二进制的文件,那么这个二进制的文件就是一个程序
什么是进程?
进程
是指程序
在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位
例如:
- 启动记事本这个程序, 在系统中就会创建一个记事本进程
- 再次启动记事本这个程序,又会在系统中创建一个记事本进程
程序和进程的关系就好比剧本和演出的关系
剧本对应程序,演出对应进程。同一个剧本可以在多个舞台同时演出互不影响,同一个程序可以在系统中开启多个进程互不影响
所以程序和进程的关系是 1:N,所以多个进程的空间是独立的
什么是线程?
线程是指进程中的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基本单位
一个进程中至少有一个线程,这个线程我们称之为主线程
一个进程中除了主线程
以外,我们还可以创建和销毁多个线程
例如:
- 启动迅雷这个程序,系统会创建一个
迅雷进程
,并且默认会有一个主线程
,用于执行迅雷默认的业务逻辑 - 当我们利用迅雷下载
多个任务
的时候,会发现多个任务都在同时下载
,此时为了能够同时执行
下载操作,迅雷就会创建多个线程,将不同的下载任务放到不同的线程中执行
什么是协程?
协程是一种用户态的轻量级线程,又称微线程,英文名 Coroutine
与传统的系统级别进程和线程相比,协程最大的优势在于 轻量级。可以轻松创建上万个不会导致系统资源衰竭,而线程和进程通常很难超过1万个,这也是协程称之为 轻量级线程 的原因
一个线程中可以有任意多个协程,但某一时刻只能有一个协程在运行
,多个协程分享所在线程分配到的计算机资源
在协程中,调用一个任务就像调用一个函数一样,消耗系统资源极少,但能达到进程、线程相同的并发效果