并发编程常用术语通俗解释

简介: 并发编程常用术语通俗解释

今天来讲讲并发编程常用术语的通俗解释

1 并发

同时做多件事情。

这个解释直接表明了并发的目的,例如编写客户端程序,在后台查询数据库数据时,需要对用户的输入请求进行响应;在编写服务的程序时,可以同时响应多个用户的请求。

可以说只要产品需要同时做多件事情,那么就需要并发。

通俗地讲,程序能够同时处理多个任务就称为并发。

在谈论并发的时候,有的朋友总会想起多线程,这里有必要声明一下,并发包含多线程,多线程是并发的一种实现方式

下图是我所了解的并发方式


并发包含的方式


2 并行

把正在运行的多个任务,分割成小块,分配给多个线程同时运行。

现代计算机一般都是多核的,把所有任务只交给一个核显然是不合理的。

举例来说,如果计算机是4核的,有4个任务要同时执行,则每个核跑一个任务。


3 同步&异步

同步,按顺序执行,发起请求后,需要等待结果返回后才返回。

而对于线程间同步,线程的运行顺序并不是有序的,它是由操作系统进行管理的,想要数据保持一致,线程必须挂起并等待其他线程执行完毕。

例如,如果两个线程试图同时写入同一个变量,结果是不可知的,所以必须使用同步。而实现同步的方式可以用互斥量。

异步,不按顺序执行,发起请求后,可以立即返回,不需要等待结果返回后才返回。

以下是关于多线程的一些术语解释

4 高级接口&低级接口

在C++标准库、Qt或其它语言的标准库都提供了并行开发的高级接口,我们应尽量避免使用低级接口,使用高级接口可以很方便的处理并行开发,且上手简单,逻辑清晰,性能高效。

高级接口一般有像标准库中的future、promise,Qt中的QFuture、QFutureWatcher等。低级接口有thread、QThread、QRunnable、QMutex等。

如果你还在使用低级接口,若不是什么必须条件,那最好切换使用高级接口吧。


5 线程安全

线程调用函数,如果这个函数只修改局部变量,或是有序修改共享区数据,则我们说这个函数就是线程安全的。如果是类中的方法,我们就说这个类是线程安全的。

多线程之所以复杂,是因为要同时访问或修改共享资源,所以可以认为如果函数不对共享资源操作,或安全操作,则该函数是线程安全的。


6 互斥量

当多个线程同时访问公共资源时,可以使用互斥量,谁先抢到锁,谁就可以访问公共资源,待锁释放后,其它线程才可以再次抢锁。

下图是A先获得了锁进入房间,BCD都必须在门外等候,只有A从房间出来,释放锁后,BCD才可以重新抢占。

互斥量

7 信号量

信号量是更一般化的互斥量。一个互斥量只能被锁定一次,但是一个信号量可以被锁住多次。信号量通常用于保护一定数量的相同资源。

电影院选座

信号量的一个很好的例子是电影院选座。

  • 一个信号量被初始化为电影院里的座位数量,如上图为5个座位数。
  • 第1个人获取座位数1(可用信号量个数变为4),成功(黄色)
  • 第2个人获取座位数2(可用信号量个数变为2),成功(蓝色)
  • 第3个人获取座位数3,失败,因为可用的信号量已经剩余2个了。
  • 如果第3个人想要获取到3个座位,则必须等待其他人释放掉信号量个数,可用的信号量数大于等于3才可以

信号量可以运用在餐厅订座,车票订座等场景

8 死锁

两个或两个以上的线程,彼此竞争资源而造成的一种彼此阻塞的现象。


死锁

蓝色的钥匙被锁到箱子A中,黄色的钥匙被锁到箱子B中,出现死锁


欢迎关注

微信公众号:小豆君编程分享

头条号:小豆君编程分享

相关文章
|
6月前
|
网络协议 关系型数据库 MySQL
网络编程01 常见名词的一些解释
网络编程01 常见名词的一些解释
121 0
|
5月前
|
移动开发 人工智能 JavaScript
程序员必知:关系的基本概念及其性质
程序员必知:关系的基本概念及其性质
78 3
|
6月前
|
存储 算法 程序员
从1024开始,我们漫谈编程的本质
从1024开始,我们漫谈编程的本质
52 0
|
存储 NoSQL C语言
基本概念和术语
基本概念和术语
|
算法 安全 程序员
c++模板的概念全新解释(一)
c++模板的概念全新解释(一)
197 0
|
算法 搜索推荐 程序员
c++模板的概念全新解释(二)
c++模板的概念全新解释(二)
122 0
|
编解码 缓存 NoSQL
7点 讲明白地图切片的概念与原理
7点 讲明白地图切片的概念与原理
473 0
|
存储 NoSQL C语言
一、基本概念和术语
一、基本概念和术语
一、基本概念和术语
|
编解码 缓存 NoSQL
7 段话说明 地图切片的概念与原理
7 段话说明 地图切片的概念与原理
211 0
|
XML Java 数据格式
你能用几句话解释面向对象?(下)
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。
133 0
你能用几句话解释面向对象?(下)