【C++并发编程01】初识C++并发编程

news2025/6/4 20:16:27

1、并发是什么
并发是指两个或更多独立的活动同时发生,现实生活中常见的并发场景如边吃饭边看手机。

1.1、计算机中的并发:
计算机领域的并发是指在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。
我们在电脑上能够边听音乐边和其他人在网上聊天就是使用了计算机的并发功能,这也叫计算机的分时系统,使用的是时间切片的技术。
时间切片能通过操作系统将CPU时间划分为多个很小的时间段(通常为毫秒级),每个时间段称为一个时间片。系统按照一定的调度算法,将时间片轮流分配给各个就绪状态的进程。实现多个用户终端同时使用一台计算机资源。

1.2、单核计算机的并发假象:
单核计算机只有一个处理器,只能在某一时刻执行一个任务,不过他可以每秒钟进行多次任务切换。通过“这个任务做一会,再切换到别的任务,再做一会”的方式,让任务看起来是并行执行的。
每次任务切换都需要切换一次上下文,为当前运行的任务保存cpu的状态和指令指针,并计算出要切换到哪个任务,并未即将切换到的任务重新加载处理器装填。任务切换过程需要时间开销。

1.3、多核计算机并发:
单芯多核处理器,能够真正的并行执行多个任务,也称为“硬件并发”。
在这里插入图片描述

两个任务在单核处理和双核处理器中的执行情况

1.4、并发的两种途径
a、多进程并发:
将应用程序分为多个独立的进程,他们在同一时刻运行,就像同时进行网页浏览和文字处理一样。进程与进程之间通过ipc通信。
[图片]

b、多线程并发:
在单个进程中运行多个线程,进程中的所有线程都共享地址空间,当一个数据被多个线程同时访问时,需要确保数据的一致性。
在这里插入图片描述

2、使用并发的原因
使用并发的主要原因有两个:关注点分离和性能考虑
2.1、关注点分离
通过将相关代码与无关代码分离,可以使程序更容易理解和测试,从而减少出错的可能性。
若不显示地使用并发,就的编写一个任务切换框架,让程序代码逻辑更复杂。
2.2、为了性能
在单个芯片上集成多个处理器,当并行运行多个任务时可以获取更好的性能。

  • 任务并行:将单个任务拆分成几部分,且各自运行裕兴,从而降低总运行时间。
  • 数据并行:每个线程在不同的额数据部分上执行相同的操作。实现在相同的时间内处理了更多的数据。

2.3、不使用并发的场景:
不使用并发的唯一原因就是收益比不上成本。一般考虑如下几点原因:
1)使用并发的代码会增加代码的复杂性,在很多情况下难以理解,增加脑力成本。
2)线程启动存在固有的开销,将新线程加入到调度器中,需要一定的时间。且让太多的线程同时运行,会消耗很多操作系统资源,因为每个线程都需要独立的堆栈空间,最后让操作系统运行得更加缓慢。
3)多线程运行时,需要做更多的上下文切换,都需要消耗cpu运行时间。

3、使用thread实现并发编程

#include <iostream>
#include <thread> //①
void hello() //②
{
	std::cout << "Hello Concurrent World\n";
}

int main()
{
	std::thread t(hello); //③
	t.join(); //④
}

1)要使用C++多线程,需要引入函数库
2)每个线程执行都需要有一个初始函数,新线程的执行在这里开始。主线程的开始函数是main
3)初始化线程thread t,将线程初始函数hello作为参数传入
4)线程thread调用join方法,会导致调用线程(main线程)等待线程t执行完成,才会继续往下执行,否则主线程自顾自执行并结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql库的操作和表的操作

Mysql库和表的操作 库的操作1.查看数据库列表2.创建数据库3.使用数据库4.查看当前在那个数据库中5.显示数据库的创建语句6.修改数据库7.删除数据库8.备份和恢复数据库9.查看数据的连接情况(简单来说就是查看有多少人使用你的数据库) 表的操作1.创建表2.查看表结构3.修改表本身(…

LangChain-结合GLM+SQL+函数调用实现数据库查询(三)

针对 LangChain-结合GLM+SQL+函数调用实现数据库查询(二)-CSDN博客 进一步简化 通过 LangChain 和大语言模型(GLM-4)实现了一个 AI 代理,能够根据自然语言提问自动生成 SQL 查询语句,并连接 MySQL 数据库执行查询,最终返回结果。 整个流程如下: 用户提问 → AI 生成 SQ…

抖音商城抓包 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 抓包展示 总结 1.出于安全考虑,本章未…

性能优化 - 案例篇:数据一致性

文章目录 Pre引言1. 分布式缓存概念2. Redis 与 Memcached 区别概览3. Spring Boot 中使用 Redis3.1 引入依赖与常用客户端3.2 RedisTemplate 的基本用法3.3 Spring Cache 注解式缓存 4. 秒杀业务简介及挑战5. Lua 脚本实现原子库存扣减5.1 准备阶段&#xff1a;数据预加载5.2 …

Spring框架学习day6--事务管理

Spring事务管理 Spring事务管理是在AOP的基础上&#xff0c;当我们的方法完全执行成功后&#xff0c;再提交事务&#xff0c;如果方法中有异常&#xff0c;就不提交事务 Spring中的事务管理有两种方式&#xff1a; ​ 1.编程式事务 ​ 需要我们在业务代码中手动提交 ​ 2.声明式…

免费酒店管理系统+餐饮系统+小程序点餐——仙盟创梦IDE

酒店系统主屏幕 房间管理 酒店管理系统的房间管理&#xff0c;可实现对酒店所有房间的实时掌控。它能清晰显示房间状态&#xff0c;如已预订、已入住、空闲等&#xff0c;便于高效安排入住与退房&#xff0c;合理分配资源&#xff0c;提升服务效率&#xff0c;保障酒店运营有条…

Git企业级项目管理实战

目录 1. 准备工作 2. 添加成员 2.1 添加企业成员 2.2 添加项目成员 2.3 添加仓库开发人员 3. 开发场景 - 基于git flow模型的实践 3.1 新需求加入 3.2 修复测试环境 Bug 3.3 修改预发布环境Bug 3.4 修改正式环境 Bug 3.5 紧急修复正式环境 Bug 4. 拓展阅读 4.1 其…

【实例】事业单位学习平台自动化操作

目录 一、创作背景: 二、实现逻辑: 三、代码分析【Deepseek分析】: 1) 主要功能 2)核心组件 2.1 GUI界面 (AutomationApp类) 2.2 浏览器自动化 2.3 平台特定处理 3) 关键技术 4)代码亮点 5)总结 四、运行截图: 五、程序代码: 特别声明:***本代码仅限编程学…

4.8.3 利用SparkSQL统计每日新增用户

在本次实战中&#xff0c;我们的任务是利用Spark SQL统计每日新增用户数。首先&#xff0c;我们准备了用户访问历史数据&#xff0c;并将其上传至HDFS。然后&#xff0c;通过Spark的交互式编程环境&#xff0c;我们读取了用户文件并将其转换为结构化的DataFrame。接着&#xff…

YOLOV7改进之融合深浅下采样模块(DSD Module)和轻量特征融合模块(LFI Module)

目录 一、研究背景​ 二. 核心创新点​ ​2.1 避免高MAC操作​ ​2.2 DSDM-LFIM主干网络​ 2.3 P2小目标检测分支​ ​3. 代码复现指南​ 环境配置 关键修改点 ​4. 实验结果对比​ 4.1 VisDrone数据集性能 4.2 边缘设备部署 4.3 检测效果可视化 ​5. 应用场景​ …

深度学习与神经网络 前馈神经网络

1.神经网络特征 无需人去告知神经网络具体的特征是什么&#xff0c;神经网络可以自主学习 2.激活函数性质 &#xff08;1&#xff09;连续并可导&#xff08;允许少数点不可导&#xff09;的非线性函数 &#xff08;2&#xff09;单调递增 &#xff08;3&#xff09;函数本…

NLP学习路线图(十四):词袋模型(Bag of Words)

在自然语言处理&#xff08;NLP&#xff09;的广阔天地中&#xff0c;词袋模型&#xff08;Bag of Words, BoW&#xff09; 宛如一块历经岁月沉淀的基石。它虽非当今最耀眼的明星&#xff0c;却为整个领域奠定了至关重要的基础&#xff0c;深刻影响了我们让计算机“理解”文本的…

鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(一)

文章大纲 引言一、模型加载概述二、核心数据结构三、模型加载核心流程 引言 Mindspore 是一款华为开发开源的AI推理框架&#xff0c;而Mindspore Lite则是华为为了适配在移动终端设备上运行专门定制的版本&#xff0c;使得我们可以在OpenHarmony快速实现模型加载和推理等功能&…

【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南​

深度优先搜索 导读&#xff1a;从广度到深度&#xff0c;探索图的遍历奥秘一、深度优先搜索二、算法思路三、算法逻辑四、算法评价五、深度优先生成树六、有向图与无向图结语&#xff1a;深潜与回溯&#xff0c;揭开图论世界的另一面 导读&#xff1a;从广度到深度&#xff0c;…

RESTful APInahamcon Fuzzies-write-up

RESTful API 路径详解 RESTful API&#xff08;Representational State Transfer&#xff09;是一种 基于 HTTP 协议的 API 设计风格&#xff0c;它通过 URL 路径 和 HTTP 方法&#xff08;GET、POST、PUT、DELETE 等&#xff09;来定义资源的访问方式。它的核心思想是 将数据…

2025年机械化设计制造与计算机工程国际会议(MDMCE 2025)

2025年机械化设计制造与计算机工程国际会议&#xff08;MDMCE 2025&#xff09; 2025 International Conference on Mechanized Design, Manufacturing, and Computer Engineering 一、大会信息 会议简称&#xff1a;MDMCE 2025 大会地点&#xff1a;中国贵阳 审稿通知&#…

Jmeter逻辑控制器、定时器

目录 一、Jmeter逻辑控制器 ①IF(如果)控制器 作用&#xff1a; 位置&#xff1a; 参数介绍&#xff1a; 步骤&#xff1a; ②循环控制器 作用&#xff1a; 位置&#xff1a; 步骤&#xff1a; 线程组属性VS循环控制器 ③ForEach控制器 作用&#xff1a; 位置&am…

R3GAN利用配置好的Pytorch训练自己的数据集

简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异性能。 论文题目:The GAN is dead; long l…

吴恩达机器学习笔记(1)—引言

目录 一、欢迎 二、机器学习是什么 三、监督学习 四、无监督学习 一、欢迎 机器学习是当前信息技术领域中最令人兴奋的方向之一。在这门课程中&#xff0c;你不仅会学习机器学习的前沿知识&#xff0c;还将亲手实现相关算法&#xff0c;从而深入理解其内部机理。 事实上&…

【笔记】Windows 部署 Suna 开源项目完整流程记录

#工作记录 因篇幅有限&#xff0c;所有涉及处理步骤的详细处理办法请参考文末资料。 Microsoft Windows [Version 10.0.27868.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗…