【高并发】并发数据结构与多核编程

news2024/11/24 6:32:28

系列综述:
💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于多处理器编程的艺术进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
🤭结语:如果有帮到你的地方,就点个赞关注一下呗,谢谢🎈🎄🌷!!!
🌈【C++】秋招&实习面经汇总篇


文章目录

    • 绪论
      • 并发编程
      • 阿姆达法则
      • 互斥
      • 二级标签
      • 二级标签
    • 参考博客


😊点此到文末惊喜↩︎


绪论

并发编程

  1. 多核体系发展的原因
    • 单核提升速度降低
    • 多核能耗效率高
  2. 共享存储多处理器(Shared Memory Multiprocessor SMP)
    • 多个处理器,共享同一个内存。
    • 每个线程对应一段顺序程序,线程之间通过对共享内存中的数据对象进行操作实现通信。
    • 线程是异步的,在任何时间都可能延迟一段不可预测的时间
  3. 多线程并发处理可能导致对于共享内存区域的乱序存储,从而出现错误。
  4. 解决方式:多线程并发处理的共享内存区域需要保证互斥访问,互斥可以保证代码执行的原子性,但是可能降低并发性能
  5. 核心问题:保证正确性的同时,尽可能的提高并发程度

阿姆达法则

  1. 定义:假定单个处理器完成作业的时间是1,作业中可并行处理的部分是 p。那么不能并行处理的部分是 1-p。使用 n个处理器完成作业的时间就是 1 − p + p n 1-p + \frac {p}{n} 1p+np,speedup = 1 1 − p + p n \frac{1}{1-p + \frac {p}{n}} 1p+np1
  2. 由阿姆达法则可知,加速比的关键是减少程序中不可并行处理的部分

互斥

  1. 临界区:访问临界资源的那部分代码,临界代码同一时刻只能有一个线程在执行。
  2. 如果程序的所有代码都互斥,则将无法进行多核的并发。所以应该尽可能降低并发粒度,提高加速比(并发度)。
  3. 并发性/非确定性
    • 安全性:坏的事情永远不会发生,如互斥
    • 活性:好的事情一定会发生,如无死锁
  4. 事件
    • 定义:线程执行完成某个动作的时间点
    • 本质:线程从一个状态到另一状态的迁移
    • 特点:不会有同时发生的事件
  5. 线程:每个线程的执行是一个事件序列, 在时间上是线性的全序关系。
  6. 并发:多个线程的事件在时间上的重叠,这些事件不一定相互独立,可能存在共享变量,导致不同线程的事件间存在依赖关系,即线程间无法并发。
  7. 区间:由两个事件作为起点和终点进行描述的。事件是瞬时性的,区间是持续性的。
  8. 两个区间的关系
    • 相交
    • 不相交:区间A的终点在区间B的起点之前,记为 A → B A \rightarrow B AB,称为A先于B。
    • 包含
  9. 锁:通过共享内存变量来标识,并发的线程是否获得对应临界区的执行权限,从而实现临界区访问的互斥。
    • 加锁:线程调用lock方法并返回
    • 解锁:线程执行unlock方法并返回
  10. 细粒度锁往往比粗粒度锁更高效,特别是只针对临界代码的加锁。
  11. 锁的性质
    • 互斥:不同线程的临界区不交叠,即不同线程对临界区的执行是先于关系(严格的偏序线性)
    • 无死锁:锁一定会被某个申请的线程获取。个体可能无进展,但系统一定有进展。
    • 无饥饿:试图获取一个锁的线程一定会成功获取到锁。所有个体都有进展。

二级标签


二级标签


少年,我观你骨骼清奇,颖悟绝伦,必成人中龙凤。
不如点赞·收藏·关注一波


🚩点此跳转到首行↩︎

参考博客

  1. 待定引用
  2. 待定引用
  3. 待定引用
  4. 待定引用
  5. 待定引用
  6. 待定引用
  7. 待定引用
  8. 待定引用

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

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

相关文章

【JavaEE初阶】认识线程(Thread)

目录 🌾 前言 🌾 了解线程 🌈1.1 线程是什么? 🌈1.2 一些基本问题 🌾2、创建线程的方式 🌈 2.1 继承Thread类 🌈 2.2 实现Runnable接口并重写run()方法 🌈 注意…

有哪些好的学习方法?学霸们自己在用,却不愿意透露的

临近期末,很多家长都在跟我咨询,怎么才能提升孩子的学习效率? 原因就是,每天看着自己的孩子学习到深夜,但不少内容还是记不住, 学习和复习的效果非常的不理想。 今天,给大家分享的方法,是我自己一直也都在用的方法,效果非常的棒。 学长Ron,江苏某省重点高中毕业,高…

给公司搭建一个人才库系统,前台(信息填写+简历上传)后台(筛选功能+下载简历)

首先指出目前代码的不足之处: 如果公司使用,代码还存在风险问题,需要增加防火墙、防PHP攻击、后台加验证等操作 以下指南: 1.Mod Security 和 Fail2Ban 是开源的安全软件,您可以在宝塔面板上安装和配置这些软件来增强您…

【JUC】ThreadLocal

【JUC】ThreadLocal 文章目录 【JUC】ThreadLocal1. 概述2. Thread、ThreadLocal、ThreadLocalMap 关系2.1 Thread 和 ThreadLocal2.2 ThreadLocal 和 ThreadLocalMap2.3 三者之间的关系 1. 概述 ThreadLocal 提供线程局部变量。这些变量与正常的变量不同,因为每一…

Java 基础入门篇(一)—— Java 概述

文章目录 一、Java 概述二、Java 的产品 JDK2.1 JDK 安装2.2 Java与 Javac 介绍2.3 Java 程序的开发步骤 三、Java 程序的执行原理四、JDK 的组成五、Java 的跨平台工作原理 一、Java 概述 Java 是 sun 公司在 1995 年推出的一门计算机高级编程语言,其语言风格接近人…

音视频技术开发周刊 | 291

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 谷歌将 AI 芯片团队并入云计算部门 追赶微软和亚马逊 OpenAI推出的ChatGPT获得一定成功,微软是OpenAI的重要投资者,它将ChatGPT植入必应搜索&#…

Java 基础入门篇(三)—— 数组的定义与内存分配

文章目录 一、数组的定义1.1 静态初始化数组1.2 动态初始化数组1.3 数组的访问 二、数组的遍历三、数组的内存图 ★3.1 Java 的内存分配3.2 数组的内存图3.3 两个数组变量指向同一个数组对象 四、数组使用的常见问题补充:随机数 Random 类 一、数组的定义 数组就是…

机器视觉工程师职场四点“心态>交流=思路>知行合一”

视觉人机器视觉团队,他们热爱机器视觉行业,爱学习,爱分享。这一路上,首先感谢粉丝们805天一如既往的支持。我想团队拥有这些粉丝,是富有的,也是我们一直创作的动力。 是否记得毕业季,自己的豪言壮语。希望你毕业三年后,无论结果如何,不忘初心,继续前行。 机器视觉工程…

Dart - 爬取Android Studio历史版本信息

文章目录 前言开发环境开发过程1. 遵循robots协议2. 页面结构分析3. Dart项目创建4. Dart项目运行与调试5. 第三库依赖6. 项目完整源码 运行结果最后 前言 整理Android Studio历史版本信息时发现有点多,于是想一劳永逸写一个简单的爬虫抓取一下数据并生成我想要的格…

【ansys】网格划分-优化、改善网格质量、修复网格、减小skewness、增大Orthogonal Quality的技巧

一、分析几何结构网格划分拓扑关系,调整网格尺寸 优化策略1:如果发现质量差的网格单元聚集在某一个实体附近,基本说明是这个实体的网格划分定义存在优化的地方。 例如下面这个几何模型。一个薄壁状长方体,加上一个模具框架&#x…

代码优美,搬砖不累:探索高质量代码之路

一、 前言 写出高质量代码是每个程序员的追求,也是提高自己编程能力的必经之路。高质量的代码可以提高软件的可维护性、可读性、可扩展性和可移植性等,降低软件开发和维护的成本。本文将介绍一些如何写出高质量代码的实用技巧和方法。 二、高质量代码的…

搞定Maven全功能,来从根上理解Maven拉包原理

依赖 生命周期与插件 模块聚合 模块继承 属性 版本管理 环境配置 私服 <dependencyManagement>的作用 在一次需求迭代中&#xff0c;我要求同事把写好的 RPC 接口打好包上传到公司私服上。然而&#xff0c;她并不熟悉 Maven&#xff0c;仅仅掌握了最基础的使用方…

【24】linux进阶——初识shell

大家好&#xff0c;这里是天亮之前ict&#xff0c;本人网络工程大三在读小学生&#xff0c;拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识&#xff0c;希望能提高自己的技术的同时&#xff0c;也可以帮助到大家 另外其它专栏请关注&#xff1a; 锐捷数通实验&…

管家婆辉煌Ⅱ 13.32版安装方法

因管家婆辉煌版已经长期不更新&#xff0c;现已经出现蓝屏的问题&#xff0c;故此新开此贴&#xff0c;慢慢更新安装方法。 首先管家婆下载地址&#xff1a;http://www.grasp.com.cn/download.aspx?id116 先安装sql server 2008 下载后&#xff0c;运行安装&#xff0c;请注…

《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第八章课后习题参考答案

第八章 面向对象技术与UML 课后习题参考答案 一、单项选择题 D &#xff08;2&#xff09;C &#xff08;3&#xff09;B &#xff08;4&#xff09;D &#xff08;5&#xff09;C &#xff08;6&#xff09;B &#xff08;7&#xff09;A &#xff08;8&#xff09;C&…

【LeetCode】343. 整数拆分

343. 整数拆分&#xff08;中等&#xff09; 方法一&#xff1a;数学推导 思路 将数字 n 拆分为若干个数字之和&#xff0c;即 n n1 n2 ... na &#xff0c;本道题等价于求解 max(n1 * n2 * ... * na) &#xff0c;根据数学推导&#xff0c;可以得到两个结论&#xff1a;…

【51单片机】LED点阵屏

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Waiting For Love】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;74HC595图片 &#x1f354;74HC59…

多层感知器模型与模型训练

文章目录 1. 多层感知器模型与模型训练1.1 多层感知器模型1.2 损失函数1.3 优化器与初始化模型1.4 编写训练循环1.5 案例代码整合 最近看了日月光华老师的《PyTorch深度学习简明实战》&#xff0c;将里面的代码自己动手复现了一遍&#xff0c;还是受益良多&#xff0c;书里面的…

【Python】狂肝两万字带你学会——类与对象

目录 01-初始对象 生活中的数据组织 程序中的数据组织​编辑 使用对象组织数据 总结01 02-类的成员方法 类的定义和使用 成员变量和成员方法 成员方法的定义语法 注意事项 成员方法——代码演示 总结02 03-类和对象 现实世界的事物和类 类和对象 使用类和对象…

Android 9.0 原生SystemUI下拉通知栏每条通知默认展开

1.前言 在9.0的系统rom原生开发中,在产品对SystemUI下拉通知栏做定制的时候,在下拉状态栏的时候,通知栏中 最后一条通知默认是收缩的 点击按钮 就会展开 原生系统systemui就是如此,为了更美观 所以要求最后一条通知也默认展开,显得更美观 最终效果图: 2.原生SystemUI下拉通…