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

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

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

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


欢迎关注

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

头条号:小豆君编程分享

相关文章
|
10月前
|
弹性计算 Kubernetes 测试技术
Kubernetes v1.30.6 环境下 HPA 自动扩缩容完整实践指南
本文基于Kubernetes v1.30.6,详解HPA自动扩缩容端到端实践,涵盖Metrics Server部署、TLS问题修复、测试应用部署、压测验证及私有Harbor镜像同步方案,提供版本兼容性与生产配置建议,助你快速落地弹性伸缩能力。
|
存储 安全 网络安全
如何识别和防范网络钓鱼攻击?
通过以上方法的综合运用,可以有效识别和防范网络钓鱼攻击,降低遭受网络安全威胁的风险,保护个人信息和财产安全。
1516 68
|
人工智能 Serverless API
评测|全网最强🚀!5min部署满血版DeepSeek,零成本,无需编程!
本文介绍了阿里云提供的四种DeepSeek部署方案,包括基于百炼调用满血版API、基于函数计算部署、基于人工智能平台PAI部署和GPU云服务器部署。通过这些方案,用户可以摆脱“服务器繁忙”的困扰,实现快速部署与使用
4122 3
评测|全网最强🚀!5min部署满血版DeepSeek,零成本,无需编程!
|
存储 设计模式 缓存
5分钟迅速掌握领域驱动设计的40个关键概念
本文对《领域驱动设计-软件复杂性应对之道》一书进行高度凝练,梳理了领域驱动设计的架构图、基本要素和重要概念。从细节入手,以小见大,你想知道的定义,这里都有。
532 11
|
Cloud Native Devops 虚拟化
Docker和VMWare有什么不同
【10月更文挑战第18天】Docker和VMWare有什么不同
|
SQL 数据可视化 数据挖掘
让项目数据更有说服力:五款必备数据可视化管理工具推荐
在现代企业管理中,数据是决策的重要依据。有效的数据可视化工具能帮助项目经理快速洞察项目进展、评估风险、优化资源配置。本文推荐五款必备的数据可视化管理工具,包括板栗看板、Power BI、Tableau、Google Data Studio和Qlik Sense,从功能、易用性和优缺点等方面进行全面评析,帮助您将数据转化为行动,推动项目高效前行。
900 4
|
存储 负载均衡 网络协议
gRPC 的原理 介绍带你从头了解gRPC
gRPC 的原理 介绍带你从头了解gRPC
1235 2
|
安全 Ubuntu 网络安全
docker中主机模式(host)
【10月更文挑战第4天】
1523 1
|
SQL 关系型数据库 MySQL
小索引大力量,记一次explain的性能优化经历
本文介绍了在MySQL生产环境中使用EXPLAIN工具进行性能优化的过程。通过分析慢查询日志,识别出性能瓶颈,并利用EXPLAIN命令解析SQL执行计划,找出全表扫描、未使用索引等问题。文章还详细描述了如何配置慢查询日志、解读EXPLAIN输出的关键字段(如type、key、rows等),并提供了优化建议,如避免左右模糊查询、减少多表联查等。最终验证优化效果,确保系统性能提升。此外,强调了项目初期建立索引的重要性,以应对未来数据量增长带来的挑战。
764 0

热门文章

最新文章