C++11并发与多线程笔记(13) 补充知识、线程池浅谈、数量谈、总结
C++11并发与多线程笔记(13) 补充知识、线程池浅谈、数量谈、总结
- 1、补充一些知识点
- 1.1 虚假唤醒:
- 1.2 atomic
- 2、浅谈线程池:
- 3、线程创建数量谈:
1、补充一些知识点
1.1 虚假唤醒:
notify_one或者notify_all唤醒wait()后,实际有些线程可能不满足唤醒的条件(例如:多个notify_one语句唤醒,或者多个“out函数“取数据),就会造成虚假唤醒,可以在wait中再次进行判断解决虚假唤醒。
解决:wait中要有第二个参数(lambda),并且这个lambda中要正确判断所处理的公共数据是否存在。
//第8节
my_cond.wait(myUniLock, [=] {if (!test_list.empty())return true;return false;});
1.2 atomic
std::atomic<int> atm = 0;
cout << atm << endl;
这里只有读取atm是原子操作,但是整个这一行代码 cout << atm << endl; 并不是原子操作(中间有多个操作),导致最终显示在屏幕上的值是一个“曾经值”。
std::atomic<int> atm = 0;
auto atm2 = atm; //不可以,//这种定义时初始化操作不允许,显示尝试引用已删除的函数,编译器内部肯定把拷贝构造函数给干掉了
atomic<int> atm3=atm;//不可以
atomic<int> atm2(atm.load());
load():以原子方式读atomic对象的值。
atm2.store(12);
store():以原子方式写atomic对象的值。
原子操作实质上是:不允许在进行原子对象操作时进行CPU的上下文切换。
2、浅谈线程池:
场景设想:服务器程序,每来一个客户端,就创建一个新线程为这个客户提供服务。
问题:
-
有2万个玩家,不可能给每个玩家创建一个新线程,此程序写法在这种场景下不通。
-
程序稳定性问题:编写代码中,“时不时地突然”创建一个线程(来个上下文切换),这种写法,一般情况下不会出错,但是不稳定的;
线程池:把一堆线程弄到一起,统一管理。这种统一管理调度,循环利用的方式,就叫做线程池。
实现方式:程序启动时,一次性创建好一定数量的线程。这种方式让人更放心,觉得程序代码更稳定。
3、线程创建数量谈:
-
线程创建的数量极限的问题
一般来讲,2000个线程基本就是极限;再创建就会崩溃。 -
线程创建数量建议
a、采用某些技术开发程序提供的建议,遵照建议(创建线程数量=cpu数量)和指示来确保程序高效执行。
b、创建多线程完成业务;考虑可能被阻塞的线程数量,创建多余最大被阻塞线程数量的线程,如100个线程被阻塞再充值业务,开110个线程就是很合适的
c、线程创建数量尽量不要超过500个,尽量控制在200个之内;
相关文章:
C++11并发与多线程笔记(13) 补充知识、线程池浅谈、数量谈、总结
C11并发与多线程笔记(13) 补充知识、线程池浅谈、数量谈、总结 1、补充一些知识点1.1 虚假唤醒:1.2 atomic 2、浅谈线程池:3、线程创建数量谈: 1、补充一些知识点 1.1 虚假唤醒: notify_one或者notify_al…...
python高级基础
文章目录 python高级基础闭包修饰器单例模式跟工厂模式工厂模式单例模式 多线程多进程创建websocket服务端手写客户端 python高级基础 闭包 简单解释一下闭包就是可以在内部访问外部函数的变量,因为如果声明全局变量,那在后面就有可能会修改 在闭包中的…...
使用线性回归模型优化权重:探索数据拟合的基础
文章目录 前言一、示例代码二、示例代码解读1.线性回归模型2.MSE损失函数3.优化过程4.结果解读 总结 前言 在机器学习和数据科学中,线性回归是一种常见而重要的方法。本文将以一个简单的代码示例为基础,介绍线性回归的基本原理和应用。将使用Python和Nu…...
亿级短视频,如何架构?
说在前面 在尼恩的(50)读者社群中,经常指导大家面试架构,拿高端offer。 前几天,指导一个年薪100W小伙伴,拿到字节面试邀请。 遇到一个 非常、非常高频的一个面试题,但是很不好回答࿰…...
jenkins pipeline方式一键部署github项目
上篇:jenkins一键部署github项目 该篇使用jenkins pipeline-script一键部署,且介绍pipeline-scm jenkins环境配置 前言:按照上篇创建pipeline任务,结果报mvn,jdk环境不存在,就很疑惑,然后配置全…...
Vue 项目搭建
环境配置 1. 安装node.js 官网:nodejs(推荐 v10 以上) 官网:npm 是什么? 由于vue的安装与创建依赖node.js(JavaScript的运行环境)里的npm(包管理和分发工具)ÿ…...
【NetCore】09-中间件
文章目录 中间件:掌控请求处理过程的关键1. 中间件1.1 中间件工作原理1.2 中间件核心对象 2.异常处理中间件:区分真异常和逻辑异常2.1 处理异常的方式2.1.1 日常错误处理--定义错误页的方法2.1.2 使用代理方法处理异常2.1.3 异常过滤器 IExceptionFilter2.1.4 特性过…...
机器学习深度学习——BERT(来自transformer的双向编码器表示)
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——transformer(机器翻译的再实现) 📚订阅专栏:机器学习&am…...
Datawhale Django后端开发入门 Vscode TASK02 Admin管理员、外键的使用
一.Admin管理员的使用 1、启动django服务 使用创建管理员之前,一定要先启动django服务,虽然TASK01和TASK02是分开的,但是进行第二个流程的时候记得先启动django服务,注意此时是在你的项目文件夹下启动的,时刻注意要执…...
【ES5和ES6】数组遍历的各种方法集合
一、ES5的方法 1.for循环 let arr [1, 2, 3] for (let i 0; i < arr.length; i) {console.log(arr[i]) } // 1 // 2 // 32.forEach() 特点: 没有返回值,只是针对每个元素调用func三个参数:item, index, arr ;当前项&#…...
学科在线教育元宇宙VR虚拟仿真平台落实更高质量的交互学习
为推动教育数字化,建设全民终身学习的学习型社会、学习型大国,元宇宙企业深圳华锐视点深度融合VR虚拟现实、数字孪生、云计算和三维建模等技术,搭建教育元宇宙平台,为学生提供更加沉浸式的学习体验,提高学习效果和兴趣…...
[python爬虫] 爬取图片无法打开或已损坏的简单探讨
本文主要针对python使用urlretrieve或urlopen下载百度、搜狗、googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨。同时,作者将进一步帮你巩固selenium自动化操作和urllib…...
vue项目预览pdf功能(解决动态文字无法显示的问题)
最近,因为公司项目需要预览pdf的功能,开始的时候找了市面上的一些pdf插件,都能用,但是,后面因为pdf变成了需要根据内容进行变化的,然后,就出现了需要动态生成的文字不显示了。换了好多好多的插件…...
vue3 样式穿透:deep不生效
初学vue3,今天需要修改el-input组件的属性(去掉border和文字居右) 网上搜了一下,大致都是采用:deep 样式穿透来修改el-input的属性 <div class"input-container"><el-input placeholder"请输入111&qu…...
云原生反模式
通过了解这些反模式并遵循云原生最佳实践,您可以设计、构建和运营更加强大、可扩展和成本效益高的云原生应用程序。 1.单体架构:在云上运行一个大而紧密耦合的应用程序,妨碍了可扩展性和敏捷性。2.忽略成本优化:云服务可能昂贵&am…...
【2023年11月第四版教材】《第5章-信息系统工程(合集篇)》
《第5章-信息系统工程(合集篇)》 章节说明1 软件工程1.1 架构设计1.2 需求分析1.3 软件设计1.4 软件实现[补充第三版教材内容] 1.5 部署交付 2 数据工程2.1 数据建模2.2 数据标准化2.3 数据运维2.4 数据开发利用2.5 数据库安全 3 …...
【qiankun】微前端在项目中的具体使用
1、安装qiankun npm install qiankun --save2、主应用中注册和配置qiankun 在主应用的入口文件main.ts中,引入qiankun的注册方法: import { registerMicroApps, start } from qiankun;创建一个数组,用于配置子应用的相关信息。每个子应用都…...
云安全与多云环境管理:讨论在云计算和多云环境下如何保护数据、应用程序和基础设施的安全
随着云计算和多云环境的广泛应用,企业正面临着数据、应用程序和基础设施安全的新挑战。在这个数字化时代,保护敏感信息和业务运作的连续性变得尤为重要。本文将深入探讨在云计算和多云环境下如何有效地保护数据、应用程序和基础设施的安全。 章节一&…...
npm install ffi各种失败,换命令npm i ffi-napi成功
网上各种帖子安装ffi,基本上到了windows build tools这里会卡住。 使用命令npm install --global --production windows-build-tools 安装报错信息如下: PS E:\codes\nodejsPath\tcpTest> npm install --global --production windows-build-tools …...
0.flink学习资料
论文: (1)google dataflow model 下载链接:p1792-Akidau.pdf (vldb.org) Akidau T, Bradshaw R, Chambers C, et al. The dataflow model: a practical approach to balancing correctness, latency, and cost in massive-scal…...
SiameseUIE保姆级教程:3步部署nlp_structbert_siamese-uie_chinese-base
SiameseUIE保姆级教程:3步部署nlp_structbert_siamese-uie_chinese-base 信息抽取不再需要标注数据,一个模型搞定NER、关系抽取、事件抽取、情感分析四大任务 1. 什么是SiameseUIE?为什么值得一试 如果你正在处理中文文本信息抽取任务&#…...
Qt状态机实战指南:从基础到高级应用
1. Qt状态机基础入门 第一次接触Qt状态机时,我完全被它的设计哲学惊艳到了。想象一下你家的智能电饭煲:待机、煮饭、保温就是三个典型状态,按下按钮就是触发状态转换的信号——这就是状态机最接地气的理解方式。Qt中的QStateMachine框架&…...
OpenClaw移动端适配:手机飞书调用Qwen3-VL:30B的优化技巧
OpenClaw移动端适配:手机飞书调用Qwen3-VL:30B的优化技巧 1. 移动端适配的痛点与挑战 上周我在星图平台部署了Qwen3-VL:30B模型,并通过OpenClaw接入了飞书。当我在办公室用电脑测试时一切正常,但周末带孩子去公园时想用手机处理工作&#x…...
创龙T113-i开发板:从SDK解压到镜像打包,一个完整Linux系统构建实录(含80分钟编译避坑)
创龙T113-i开发板实战:从零构建嵌入式Linux系统的完整指南 1. 开发环境准备与SDK解压 第一次接触全志T113-i开发板时,最令人头疼的莫过于搭建开发环境。与常见的树莓派或BeagleBone开发板不同,工业级嵌入式设备往往需要更专业的工具链支持。我…...
如何快速实现智能自动化配置:OpCore-Simplify完整实战指南
如何快速实现智能自动化配置:OpCore-Simplify完整实战指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款专为Hack…...
java毕业设计基于springboot+vue的滑雪场雪具租赁服务系统
前言 随着滑雪运动的普及和滑雪场规模的扩大,滑雪场对雪具租赁服务的需求日益增加。传统的租赁方式存在管理效率低下、用户体验不佳等问题,无法满足现代滑雪场的需求。因此,开发一个基于Spring Boot的滑雪场雪具租赁服务系统,旨在…...
Qwen-Image-2512在Windows11环境下的快速部署教程
Qwen-Image-2512在Windows11环境下的快速部署教程 1. 前言 你是不是也对AI生成图片感兴趣,但总觉得部署过程太复杂?今天我来分享一个超级简单的教程,让你在Windows11系统上快速部署Qwen-Image-2512模型。这个模型是阿里最新开源的图像生成模…...
远程办公团队如何高效协作:项目管理的10条黄金法则
远程办公团队如何高效协作?本文结合10年项目管理实践,总结出目标对齐、书面共识、责任分工、沟通节奏、进度透明、风险预警、反馈复盘和团队信任等10条黄金法则,帮助管理者提升远程协作效率与项目交付质量。 远程办公已经成为许多团队的常态协…...
用ESP32和2.13寸墨水屏,我把汉朔电子价签改造成了桌面网络时钟(附完整代码)
用ESP32和2.13寸墨水屏打造极简网络时钟:从电子价签到桌面艺术 在智能硬件爱好者的世界里,总有一些被遗忘的电子元件等待重生。汉朔电子价签的2.13寸墨水屏就是这样一个被低估的宝藏——它低功耗、高对比度的特性,配合ESP32的强大无线功能&am…...
WebREPL完全指南:突破嵌入式开发环境限制 开发者的无线调试解决方案
WebREPL完全指南:突破嵌入式开发环境限制 开发者的无线调试解决方案 【免费下载链接】webrepl WebREPL client and related tools for MicroPython 项目地址: https://gitcode.com/gh_mirrors/we/webrepl 价值定位:如何突破传统开发环境限制&…...
