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

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

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

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中,出现死锁


欢迎关注

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

头条号:小豆君编程分享

相关文章
|
NoSQL Redis 数据库
深入理解redis cluster的failover机制
社区版redis cluster是无中心节点P2P的集群架构,内部采用gossip协议传递维护集群的拓扑结构和集群元数据。社区文档地址:https://redis.io/topics/cluster-tutorial failover是redis cluster提供的容错机制,cluster最核心的功能之一。
14873 0
|
10月前
|
机器学习/深度学习 人工智能 编解码
智谱AI发布新版VLM开源模型GLM-4.1V-9B-Thinking,引入思考范式,性能提升8倍
视觉语言大模型(VLM)已经成为智能系统的关键基石。
1509 0
|
存储 安全 网络安全
如何识别和防范网络钓鱼攻击?
通过以上方法的综合运用,可以有效识别和防范网络钓鱼攻击,降低遭受网络安全威胁的风险,保护个人信息和财产安全。
1264 68
|
SQL 数据可视化 数据挖掘
让项目数据更有说服力:五款必备数据可视化管理工具推荐
在现代企业管理中,数据是决策的重要依据。有效的数据可视化工具能帮助项目经理快速洞察项目进展、评估风险、优化资源配置。本文推荐五款必备的数据可视化管理工具,包括板栗看板、Power BI、Tableau、Google Data Studio和Qlik Sense,从功能、易用性和优缺点等方面进行全面评析,帮助您将数据转化为行动,推动项目高效前行。
759 4
|
存储 负载均衡 网络协议
gRPC 的原理 介绍带你从头了解gRPC
gRPC 的原理 介绍带你从头了解gRPC
1073 2
|
移动开发 前端开发 JavaScript
Notepad++,还有 5 款更牛逼的选择
Notepad++,还有 5 款更牛逼的选择
532 1
|
调度
解释一下为什么协程比线程更轻量级。
解释一下为什么协程比线程更轻量级。
892 1
|
机器学习/深度学习 前端开发 数据可视化
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
2171 0
|
Web App开发 开发框架 前端开发
Fastadmin是一款基于thinkphp和bootstrap的快速后台开发框架
Fastadmin是一款基于thinkphp和bootstrap的快速后台开发框架
577 2