首页 > 其他分享 >11.25

11.25

时间:2024-12-16 14:46:09浏览次数:11  
标签:语句 访问 11.25 并发 编译器 线程 内存

语句并非按顺序执行

 

C++ 程序表现得仿佛它们是按顺序执行的,完全遵守了 C++ 流程控制语句的控制。上句话影响优化的计算机行为 | 19
中的含糊其辞的“仿佛”正是许多编译器进行优化的基础,也是现代计算机硬件的许多技
巧的基础。

当然,在底层,编译器能够而且有时也确实会对语句进行重新排序以改善性能。但是编译
器知道在测试一个变量或是将其赋值给另外一个变量之前,必须先确定它包含了所有的最
新计算结果。现代处理器也可能会选择乱序执行指令,不过它们包含了可以确保在随后读
取同一个内存地址之前,一定会先向该地址写入值的逻辑。甚至微处理器的内存控制逻辑
可能会选择延迟写入内存以优化内存总线的使用。但是内存控制器知道哪次写值正在从执
行单元穿越高速缓存飞往主内存的“航班”中,而且确保如果随后读取同一个地址时会使
用这个“航班”中的值。
并发会让情况变得复杂。C++ 程序在编译时不知道是否会有其他线程并发运行。C++ 编译
器不知道哪个变量——如果有的话——会在线程间共享。当程序中包含共享数据的并发线
程时,编译器对语句的重排序和延迟写入主内存会导致计算结果与按顺序执行语句的计算
结果不同。开发人员必须向多线程程序中显式地加入同步代码来确保可预测的行为的一致
性。当并发线程共享数据时,同步代码降低了并发量。

总结:

• 在处理器中,访问内存的性能开销远比其他操作的性能开销大。
• 非对齐访问所需的时间是所有字节都在同一个字中时的两倍。
• 访问频繁使用的内存地址的速度比访问非频繁使用的内存地址的速度快。
• 访问相邻地址的内存的速度比访问互相远隔的地址的内存快。
• 由于高速缓存的存在,一个函数运行于整个程序的上下文中时的执行速度可能比运行于
测试套件中时更慢。
• 访问线程间共享的数据比访问非共享的数据要慢很多。
• 计算比做决定快。
• 每个程序都会与其他程序竞争计算机资源。
• 如果一个程序必须在启动时执行或是在负载高峰期时执行,那么在测量性能时必须加载
负载。
• 每一次赋值、函数参数的初始化和函数返回值都会调用一次构造函数,这个函数可能隐
藏了大量的未知代码。
• 有些语句隐藏了大量的计算。从语句的外表上看不出语句的性能开销会有多大。
• 当并发线程共享数据时,同步代码降低了并发量。

标签:语句,访问,11.25,并发,编译器,线程,内存
From: https://www.cnblogs.com/xscya/p/18610094

相关文章

  • C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等......
  • C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等。......
  • 11.25实验 23:策略模式
    [实验任务一]:旅行方式的选择旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式。实验要求:1. 画出对应的类图;  2. 提交源代码;packagestrategy; publicclassPerson{    priv......
  • 上周热点回顾(11.25-12.1)
    热点随笔:· 2024年各编程语言运行100万个并发任务需要多少内存? (InCerry)· .NET9-Swagger平替Scalar详解(四) (IT规划师)· 《HelloGitHub》第104期 (削微寒)· MySQL用错了,99%的人已中招 (苏三说技术)· .NETCore线程池(ThreadPool)底层原理浅谈 (叫我安不理)·......
  • 11.25日报
    完成设计模式实验十八,以下为今日实验内容:实验18:迭代器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解迭代器模式的动机,掌握该模式的结构;2、能够利用迭代器模式解决实际问题。     [实验任务一]:JAVA和C++常见数据结构迭代器的使用信130......
  • 985研一学习日记 - 2024.11.25
    一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。日常1、起床2、健身3、LeetCode刷了1题单词拆分给定一个非空字符串s和一个包含非空单词的列表wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。该问题......
  • 11.25 周一日常
    11.25周一日常Q1.1200给定x,y,k,k次操作,每次操作:x++,若x可被y整除,x一直除以y。问最终x的值。(x,y,k≤1e9)Q2.1400给定一等差数列a,每次操作:令最大值=mex{a}。问是否可以将a变成0~n-1的排列和最小操作次数。(1e18)Q3.1600给定一数组和lim,设操作l,r:i:l->r,令s=0,s+=a[i];每一步如......
  • 11.25 NOIP 模拟赛题解
    T1P1069[NOIP2009普及组]细胞分裂原题链接这道题就是基本的数学知识。我们直接来转化题意,这道题就是让我们求min⁡(k......
  • python复习笔记——2024.11.25
    2024.11.25一、类的定义二、类与实例的关系#定义一个猫类,age,name,color是属性,或者称为成员变量classCat: age=Nonename=Nonecolor=Nonecat1=Cat()#通过对象名.属性名,可以给各个属性赋值cat1.name="小白"cat2,age=2cat3.color="白色"print(f......
  • Java学习笔记——2024.11.25
    2024.11.25一、Java_DOS原理1.DOS基本原理创建文件夹=>mdd:\\xxx消除文件夹=>rdd:\\xxx2.相对路径和绝对路径=>相对路径:从当前目录开始定位,形成的一个路径=>绝对路径:从顶级目录d,开始定位,形成的路径举例子:相对路径:..\..\abc2\test200\hello.txt......