C++11并发与多线程笔记 (1)

news2024/11/26 12:18:27

C++11并发与多线程笔记(1)

  • 1、并发、进程、线程的基本概念和综述
    • 1.1 并发
    • 1.2 可执行程序
    • 1.3 进程
    • 1.4 线程
    • 1.5 学习心得
  • 2、并发的实现方法
    • 2.1 多进程并发
    • 2.2 多线程并发
  • 3、C++11新标准线程库

1、并发、进程、线程的基本概念和综述

1.1 并发

指在一个时间段内有多个进程在执行

  • 两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务;
  • 以往计算机,单核cpu(中央处理器):某一个时刻只能执行一个任务,由操作系统调度,每秒钟进行多次所谓的“任务切换”。并发的假象(不是真正的并发),切换(上下文切换)时要保存变量的状态、执行进度等,存在时间开销;
  • 随着硬件发展,出现了多处理器计算机:用于服务器和高性能计算领域。台式机:在一块芯片上有多核(一个CPU内有多个运算核心,对于操作系统来说,每个核心都是作为单独的CPU对待的):双核,4核,8核,10核(自己的笔记本是4核8线程的)。能够实现真正的并行执行多个任务(硬件并发);
  • 使用并发的原因:主要就是同时可以干多个事,提高性能。

1.2 可执行程序

磁盘上的一个文件,windows下,扩展名为.exe;linux下,ls -la,rwx(可读可写可执行)

1.3 进程

计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础,一段程序的执行过程

  • 运行一个可执行程序(在windows下,可双击;在linux下,./文件名), 进程,一个可执行程序运行起来了,就叫创建了一个进程。

进程就是运行起来的可执行程序

1.4 线程

是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
(1)

  • 每个进程(执行起来的可执行程序),都有唯一的一个主线程
  • 当执行可执行程序时,产生一个进程后,这个主线程就随着这个进程默默启动起来了
  • ctrl+F5运行这个程序的时候,实际上是进程的主线程来执行(调用)这个main函数中的代码。线程:用来执行代码的。

线程这个东西,可以理解为一条代码的执行通路
(2)

  • 除了主线程之外,可以通过写代码来创建其他线程,其他线程走的是别的道路,甚至去不同的地方
  • 每创建一个新线程,就可以在同一时刻,多干一个不同的事(多走一条不同的代码执行路径

(3)多线程(并发)
线程并不是越多越好,每个线程,都需要一个独立的堆栈空间(大约1M),线程之间的切换要保存很多中间状态,切换也会耗费本该属于程序运行的时间

必须使用多线程的案例
在这里插入图片描述

1.5 学习心得

  • 开发多线程程序:一个是实力的体现,一个是商用的必须需求
  • 线程开发有一定难度
  • C++线程会设计很多新概念
  • 网络方向:网络通讯、网络服务器,多线程是绝对绕不开的

2、并发的实现方法

实现并发的手段

  • 通过多个进程实现并发
  • 在单独的进程中,写代码创建除了主线程之外的其他线程来实现并发

2.1 多进程并发

  • 比如账号服务器一个进程,游戏服务器一个进程。
  • 服务器进程之间存在通信(同一个电脑上:管道,文件,消息队列,共享内存);(不同电脑上:socket通信技术)

2.2 多线程并发

  • 线程:感觉像是轻量级的进程。每个进程有自己独立的运行路径,但一个进程中的所有线程共享地址空间(共享内存),全局变量、全局内存、全局引用都可以在线程之间传递,所以多线程开销远远小于多进程
  • 多进程并发和多线程并发可以混合使用,但建议优先考虑多线程技术
  • 本课程中只讲多线程并发技术 B站C++11并发与多线程

3、C++11新标准线程库

以往

  • windows:CreateThread(), _beginthread(),_beginthreadexe()创建线程;linux:pthread_create()创建线程;不能跨平台
  • 临界区,互斥量
  • POSIX thread(pthread):跨平台,但要做一番配置,也不方便

C++11

  • 从C++11新标准,C++语言本身增加对多线程的支持,意味着可移植性(跨平台),这大大减少开发人员的工作量

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

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

相关文章

Kotlin入门:面向对象编程——04

一、类和对象: 在Kotlin中,使用class关键字定义类,使用object关键字定义对象。类是对象的蓝图,用于描述对象的属性和行为,而对象则是类的一个实例。类可以包含属性(成员变量)和方法&#xff08…

SpringBoot复习:(47)ConfigFileApplicationListener

它监听ApplicationEnvironmentPreparedEvent和ApplicationPreparedEvent。 它会把配置文件中配置的内容注入到环境中去,配置文件也就生效了

Photoshop快捷键大全

Photoshop是一款非常强大的图像处理软件,它提供了许多快捷键,可以帮助用户更快地完成操作。熟练掌握这些快捷键,可以大大提高工作效率,让您更加专注于创作。 Photoshop快捷键汇总: 一、基本操作快捷键 1. 新建文档…

TX Text Control .NET Server for ASP.NET Crack

TX Text Control .NET Server for ASP.NET Crack TX Text Control.NET Server for ASP.NET是用于Web应用程序或服务的服务器端组件。它是一个完全可编程的ASP.NET文字处理引擎,提供了广泛的文字处理功能。使用TX Text Control.NET Server,程序员可以开发…

day3 TCP/UDP基础模型、多点通信、TCP开发服务器模型

1.多线程中的newfd,能否修改成全局,不行,为什么? 不能。线程之间共享附属进程的所有资源,newfd是全局变量,作用域是全局,一经更改所有线程中的newfd都会变化。 2.多线程中分支线程的newfd能否…

Android 并发编程--阻塞队列和线程池

一、阻塞队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作…

TCP消息传输可靠性保证

TCP链接与断开 -- 三次握手&四次挥手 三次握手 TCP 提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。 所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一…

NLP文本匹配任务Text Matching [无监督训练]:SimCSE、ESimCSE、DiffCSE 项目实践

NLP文本匹配任务Text Matching [无监督训练]:SimCSE、ESimCSE、DiffCSE 项目实践 文本匹配多用于计算两个文本之间的相似度,该示例会基于 ESimCSE 实现一个无监督的文本匹配模型的训练流程。文本匹配多用于计算两段「自然文本」之间的「相似度」。 例如…

【ARM】Day1

作业1:思维导图 作业2: 作业3:用for循环实现1~100之间和5050

【Axure高保真原型】通过输入框动态控制环形图

今天和大家分享通过输入框动态控制环形图的原型模板,在输入框里维护项目数据,可以自动生成对应的环形图,鼠标移入对应扇形,可以查看对应数据。使用也非常方便,只需要修改输入框里的数据,或者复制粘贴文本&a…

Go语言为何强大?Python性能差为何霸榜编程语言第一?

目录 Go 语言为何强大 Go、C、C、Java、python做个简单的性能比较 Python底层是如何调用C代码的 为什么python在数据科学、机器学习和自动化较其他语言有优势 对一名软件工程师而言,语言虽然只是一门工具,往往一个软件工程师身上都会写好几门&#x…

MQTT基础入门与资料收集

文章目录 目的基础入门MQTT相关软件MQTT客户端软件MQTT Broker(服务器)软件 MQTT编程总结 目的 最近项目中涉及到MQTT相关内容,在此对相关内容做个基础的梳理。 基础入门 MQTT官网: https://mqtt.org/ MQTT是用于物联网&#x…

十大经典排序算法

目录 前言 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序 十大排序之间的比较 总结 前言 学了数据结构之后一直没有进行文字性的总结,现在趁着还有点时间把相关排序的思路和代码实现来写一下。概念的话网上…

【LeetCode】307 . 区域和检索 - 数组可修改

307 . 区域和检索 - 数组可修改 区间和解题思路 这是一道很经典的题目,通常还能拓展出一大类问题。 针对不同的题目,我们有不同的方案可以选择(假设我们有一个数组): 数组不变,求区间和:「前缀和…

多线程(进阶)

一、常见的锁策略 1.1读写锁 多线程之间,数据的读取方之间不会产生线程安全问题,但数据的写入方互相之间以及和读者之间都需 要进行互斥。如果两种场景下都用同一个锁,就会产生极大的性能损耗。所以读写锁因此而产生。 读写锁(r…

高通清库存芯片大降价,由于手机复苏不及预期

KlipC报道:8月14日,高通为刺激客户拉货意愿并加快出清库存,近期也开启了降价模式,锁定中低端 5G 手机芯片。 KlipC的合伙人Andi D指出高通在非苹中高端手机市场一直处于领先地位,因此本次降价聚焦在中低阶领域&#xf…

生成模型的三个挑战:成功部署或吓跑用户?

一、说明 目前在文本和图像领域中,统治江湖的有六大门派,他们是:OpenAI,Google,Microsoft,Midjounery,StabilityAI,CharecterAI. 每个人都在竞相为文本到文本,文本到图像…

万物识别RAM:图像识别模型,Zero-Shot超越有监督

文章目录 RAM的优势RAM的创新点总结与展望参考文献大语言模型(Large Language Models)已经给自然语言处理(NLP)领域带来了新的革命。在计算机视觉(CV)领域,Facebook近期推出的Segment Anything Model(SAM)工作,在视觉定位(Localization)任务上取得了令人振奋的结果…

怎么对视频进行压缩?

怎么对视频进行压缩?视频压缩,我们都知道是将视频文件进行压缩变小的过程,是我们日常办公中较为常用的手段。现如今,在视频技术不断发展与创新的基础上,视频分辨率也在不断提高,进而导致文件占有量也非常大…

vue-cli前端工程化——创建vue-cli工程 router版本的创建 目录结构 案例初步

目录 引出创建vue-cli前端工程vue-cli是什么自动构建创建vue-cli项目选择Vue的版本号 手动安装进行选择创建成功 手动创建router版多了一个router 运行测试bug解决 Vue项目结构main.jspackage.jsonvue.config.js Vue项目初步hello案例 总结 引出 1.vue-cli是啥,创建…