并发编程基本概念

优质
小牛编辑
145浏览
2023-12-01

学习并发编程之前我们需要脑补几个基础知识和思考一个问题

  • 什么是串行?
  • 什么是并行?
  • 什么是并发?
  • 什么是程序?
  • 什么是进程?
  • 什么是线程?
  • 什么是协程?

什么是串行?

串行就是按顺序执行,就好比银行只有1个窗口,有3个人要办事,那么必须排队,只有前面的人办完走人,才能轮到你

在计算机中, 同一时刻,只能有一条指令,在一个CPU上执行,后面的指令必须等到前面指令执行完才能执行,就是串行

什么是并行?

并行就是同时执行,就好比银行有3个窗口,有3个人要办事,只需要到空窗口即可立即办事。

在计算机中同一时刻,有多条指令,在多个CPU上执行,就是并行

从以上分析不难看出,并行的速度优于串行

什么是并发?

并发是伪并行,就好比银行只有1个窗口,有3个人要办事,那么没轮到后面的人时,后面的人可以用拖鞋先排队,去吃个早餐,买个东西啥的,感觉差不多要到自己时再回来办事

在计算机中同一时刻,只能有一条指令,在一个CPU上执行,但是CPU会快速的在多条指令之间轮询执行就是并发

并行和并发的区别就好比古代的三妻四妾(名正言顺,光明正大)和现代三妻四妾(抽空幽会,小三小四)

总结

  • 多线程程序在单核上运行,就是并发
  • 多线程程序在多核上运行,就是并行

什么是程序?

程序是指将编译型语言编写好的代码通过编译工具编译之后存储在硬盘上的一个二进制文件,会占用磁盘空间,但不会占用系统资源

  • 例如我们通过 C++ 编写了一个聊天程序,然后通过 C++ 编译器将编写好的代码编译成一个二进制的文件,那么这个二进制的文件就是一个程序

什么是进程?

进程是指程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位

例如:

  • 启动记事本这个程序, 在系统中就会创建一个记事本进程
  • 再次启动记事本这个程序,又会在系统中创建一个记事本进程

程序和进程的关系就好比剧本和演出的关系

剧本对应程序,演出对应进程。同一个剧本可以在多个舞台同时演出互不影响,同一个程序可以在系统中开启多个进程互不影响

所以程序和进程的关系是 1:N,所以多个进程的空间是独立的

什么是线程?

线程是指进程中的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基本单位

一个进程中至少有一个线程,这个线程我们称之为主线程

一个进程中除了主线程以外,我们还可以创建和销毁多个线程

例如:

  • 启动迅雷这个程序,系统会创建一个迅雷进程,并且默认会有一个主线程,用于执行迅雷默认的业务逻辑
  • 当我们利用迅雷下载多个任务的时候,会发现多个任务都在同时下载,此时为了能够同时执行下载操作,迅雷就会创建多个线程,将不同的下载任务放到不同的线程中执行

什么是协程?

协程是一种用户态的轻量级线程,又称微线程,英文名 Coroutine

与传统的系统级别进程和线程相比,协程最大的优势在于 轻量级。可以轻松创建上万个不会导致系统资源衰竭,而线程和进程通常很难超过1万个,这也是协程称之为 轻量级线程 的原因

一个线程中可以有任意多个协程,但某一时刻只能有一个协程在运行,多个协程分享所在线程分配到的计算机资源

在协程中,调用一个任务就像调用一个函数一样,消耗系统资源极少,但能达到进程、线程相同的并发效果