网站建设大致步骤旅游网站建设前期分析

bicheng/2026/1/22 11:10:40/文章来源:
网站建设大致步骤,旅游网站建设前期分析,泸州网站建设多少钱,甘孜州住房和城乡规划建设局网站写在前面好久没有写博客了#xff0c;一直在不断地探索响应式DDD#xff0c;又get到了很多新知识#xff0c;解惑了很多老问题#xff0c;最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture#xff0c;里面有一个术语Mechanical Sympathy#xff0c;姑且… 写在前面好久没有写博客了一直在不断地探索响应式DDD又get到了很多新知识解惑了很多老问题最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture里面有一个术语Mechanical Sympathy姑且翻译成软硬件协同编程Hardware and software working together in harmony很有感悟说的是要把编程与底层硬件协同起来这样对于开发低延迟、高并发的系统特别地重要为什么呢今天我们就来讲讲CPU的高速缓存。电脑的缓存系统电脑的缓存系统分了很多层级从外到内依次是主内存、三级高速缓存、二级高速缓存、一次高速缓存所以在我们的脑海里觉点磁盘的读写速度是很慢的而内存的读写速度确是快速的的确如此从上图磁盘和内存距离CPU的远近距离就看出来。这里先说明一个概念主内存被所有CPU共享三级缓存被同一个插槽内的CPU所共享单个CPU独享自己的一级、二级缓存即高速缓存。CPU是真正做事情的地方它会先从高速缓存中去获取所需的数据如果找不到再去三级缓存中查找如果还是找不到最终就去会主内存查找如果每一次都这样来来回回地取数据那么无疑是非常耗时。如果能够把数据缓存到高速缓存中就好了这样不仅CPU第一次就可以直接从高速缓存中命中数据而且每个CPU都独占自己的高速缓存多线程下也不存在临界资源的问题这才是真正的低延迟但是这个地方对我们而言根本不透明肿么办探索高速缓存的构造我们先来看一张使用鲁大师检测的处理器信息截图如下从上图可以看到CPU高速缓存一、二级的存储单元为Line大小为64 bytes也就是说无论我们的数据大小是多少高速缓存都是以64 bytes为单位缓存数据比如一个8位的long类型数组即使只有第一位有数据每次高速缓存加载数据的时候都会顺带把后面7位数据也一起加载因为数组内元素的内存地址是连续的这就是底层硬件CPU的工作机制所以我们要利用这个天然的优势让数据独占整个缓存行这样CPU命中的缓存行中就一定有我们的数据。示例使用不同的线程数对一个long类型的数值计数500亿次。备注统计分析图表和总结在最后。1. 一般的实现方式大多数程序员都会这样子构造数据老铁没毛病。代码///// summary///// CPU伪共享高速缓存行条目(伪共享)///// /summarypublic class FalseSharingCacheLineEntry{    public long Value 0L; }单线程平均响应时间 1508.56 毫秒。双线程平均响应时间 4460.40 毫秒。三线程平均响应时间 7719.02 毫秒。四线程平均响应时间 10404.30 毫秒。2. 独占缓存行直接命中高速缓存。2.1 直接填充代码/// summary/// CPU高速缓存行条目(直接填充)/// /summarypublic class CacheLineEntry{      protected long P1, P2, P3, P4, P5, P6, P7;     public long Value 0L;        protected long P9, P10, P11, P12, P13, P14, P15; }为了保证高速缓存行中一定有我们的数据所以前后都填充7个long。单线程平均响应时间 1516.33 毫秒。双线程平均响应时间 1529.97 毫秒。三线程平均响应时间 1563.65 毫秒。四线程平均响应时间 1616.12 毫秒。2.2 内存布局填充作为一个C#程序员必须写出优雅的代码可以使用StructLayout、FieldOffset来控制class、struct的内存布局。备注就是上面直接填充的优雅实现方式而已。代码/// summary/// CPU高速缓存行条目(控制内存布局)/// /summary[StructLayout(LayoutKind.Explicit, Size 120)]public class CacheLineEntryOne{[FieldOffset(56)]    private long _value;    public long Value{        get _value;        set _value value;} }单线程平均响应时间 2008.12 毫秒。双线程平均响应时间 2046.33 毫秒。三线程平均响应时间 2081.75 毫秒。四线程平均响应时间 2163.092 毫秒。3. 统计分析上面的图表已经一目了然了吧一般实现方式的持续时间随线程数呈线性增长多线程下表现的非常糟糕而通过直接、内存布局方式填充了数据后响应时间与线程数的多少没有无关达到了真正的低延迟。其中直接填充数据的方式效率最高内存布局方式填充次之在四线程的情况下一般实现方式持续时间为10.4秒多直接填充数据的方式为1.6秒内存布局填充方式为2.2秒延迟还是比较明显为什么会有这么大的差距呢刨根问底在C#下一个long类型占8 byte对于一般的实现方式在多线程的情况下隶属于每个独立线程的数据会共用同一个缓存行所以只要有一个线程更新了缓存行的数据那么整个缓存行就自动失效这样就导致CPU永远无法直接从高速缓存中命中数据每次都要经过一、二、三级缓存到主内存中重新获取数据时间就是被浪费在了这样的来来回回中。而对数据进行填充后隶属于每个独立线程的数据不仅被缓存到了CPU的高速缓存中而且每个数据都独占整个缓存行其他的线程更新数据并不会导致自己的缓存行失效所以每次CPU都可以直接命中不管是单线程也好还是多线程也好只要线程数小于等于CPU的核数都和单线程一样的快速正如我们经常在一些性能测试软件都会看到的建议线程数最好小于等于CPU核数最多为CPU核数的两倍这样压测的结果才是比较准确的现在明白了吧。最后来看一下大师们总结的未命中缓存的测试结果从CPU到大约需要的 CPU 周期大约需要的时间主存约60-80纳秒QPI 总线传输 (between sockets, not drawn)约20nsL3 cache约40-45 cycles约15nsL2 cache约10 cycles,约3nsL1 cache约3-4 cycles约1ns寄存器寄存器源码参考https://github.com/justmine66/MDA/blob/master/tests/MDA.Test.Disruptor/FalseSharingTest.cs延伸阅读Magic cache line paddingThe LMAX Architecture补充感谢 firstrose同学主动测试后的提醒大家应该向他学习带着疑惑看博客不明白的自己动手测试。对于内存布局填充方式去掉属性后经过测试性能与直接填充方式几乎无差别了不过本示例代码仅仅作为一个测试参考主要目的是给大家布道如何利用CPU高速缓存工作机制通过缓存行的填充来避免假共享从而写出真正低延迟的代码。/// summary/// CPU高速缓存行条目(控制内存布局)/// /summary[StructLayout(LayoutKind.Explicit, Size 120)]public class CacheLineEntryOne{[FieldOffset(56)]    public long Value; }总结编写单、多线程下表现都相同的代码历来都是非常困难的需要不断地从深度、广度上积累知识学无止境无痴迷不成功希望大家能有所收获。原文地址:https://www.cnblogs.com/justmine/p/9696160.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com

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

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

相关文章

网站 目录 结构上海刚刚发生的大事

一、上新 1. 有向图 从顶点A到顶点B的边,不等于从B到A的边。 2. 广度优先 遍历开始节点(第一层)的邻节点(从左至右顺序),邻接点设为第二层根据1中遍历邻接点从左往右的顺序遍历。 bilibili视频《广度优…

重庆网站制作特点优势网站建设技能

文章目录 前言一、消费者确认机制二、失败重试机制三、失败处理策略四、业务幂等性唯一消息ID业务判断 五、兜底方案总结 前言 当RabbitMQ向消费者投递消息以后,需要知道消费者的处理状态如何。因为消息投递给消费者并不代表就一定被正确消费了,可能出现…

安徽省城乡建设网站学校网站建设需求文档

一 选择排序 原理:选择排序很简单,他的步骤如下: 从左至右遍历,找到最小(大)的元素,然后与第一个元素交换。从剩余未排序元素中继续寻找最小(大)元素,然后与第二个元素进行交换。以此…

天圆地方建筑网站企业网站四种类型

先推广一下QQ群:61618925。欢迎各位爱好编程的朋友加入。 一、程序界面 二、关键部分代码: 1.数据结构定义 #define MBRSIZE 512 #define BOOTRECORDSIZE 440 #define DISKSIGNEDSIZE 4 #define RESERVESIZE 2 #define DPTNUMBER 4 #define DPTSIZE 16 #…

临沂网站建设昂牛网络网站建设与管理好处

上链接:【深基16.例1】淘汰赛 - 洛谷https://www.luogu.com.cn/problem/P4715 上题干: 题目描述 有 2^n(n≤7)个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值…

优质聊城做网站公司网站流量 次

目录 一,创建登录ui界面类 LoginWidget 二,添加图片资源 三,通过样式的方法将图片设置成圆圈的背景 四,新建登录后的ui界面 MWindow 简陋的就可以,因为只为了学习,可以自己补充 五,新建三个嵌套ui界面类,ChatWidget聊天界面 FriendWiidget好友界面 CollectW…

服装购物商城网站建设wordpress 收费主题下载

图源:文心一言 听课笔记简单整理,供小伙伴们参考,包含以下内容“🐋3.11 引用类型、🐋3.14 内联函数、🐋3.15 默认参数值、🐋3.16 函数重载、🐋3.17 C系统函数”~🥝&…

网站网址怎么写网站域名如何查询

Statement对象和查询结果集 Statement对象相关的方法 Connection接口中获取数据库操作对象Statement对象的方法 方法名功能Statement createStatement()创建Statement对象 Statement对象执行增删改查的SQL语句(不含占位符"?")的方法,JDBC中的SQL语句不需要提供分…

网站内容建设的原则是什么意思酒店找人做网站

WebRTC是音视频直播中最常用的一个框架,在使用的过程中,我们就需要实现一个服务器端。本文以nodejs实现一个服务器为例,讲述一下在centos下如何用nodejs实现一个简单的web服务器。 一、安装nodejs 在linux环境下安装nodejs有多重方式&#x…

深圳市鸿运通网站建设郑州鹏之信网站建设

之前因为工作中用的都是SVN版本控制工具,没接触过git和github,现在开始深入自学Django框架技术后,看到官网推荐使用git,然后这两天网上查阅了很多文章教程,学到入门操作需要学习的点,太多的知识点要后面慢慢…

郑州网站推广营销给个网站能看的

拿到手第一反应还是暴力,直接从低位到高位把数一个个取出来,然后乘以每一位的权重,构成一个新的反转后的整数 res 返回,代码如下 package mainimport ("fmt""math" )func reverse(x int) int {if x > -10…

学校做网站一般多少钱瑞幸网络营销策划

机器学习常用距离度量方法 前言一、前期准备二、距离度量方法1. 欧氏距离2.曼哈顿距离3.切比雪夫距离4. 闵可夫斯基距离 总结 前言 机器学习中往往通过度量来研究不同样本或数据集之间的差异性,合适的度量方式可以显著提高算法的准确率,因此在接下来的内…

创业服务网网站建设方案项目书网站开发过程中的方法

近年来,随着城市化进程的加速推进,智慧公厕成为人民生活质量提升的重要组成部分。作为一个富有创新和科技感的解决方案,智慧公厕不仅满足了人们对公共环境的要求,还提供了一系列便利的服务,让人们的生活更加舒适、便捷…

常州公司做网站创建一个网站的技术

摘要: 2023-12-01 AIGC-自动生成ppt-记录 自动生成ppt: BoardMix boardmix 一键生成ppt boardmix是一款基于云的ai设计软件,允许创建用于各种目的的自定义演示文稿、ai绘画,ai生成思维导图等。以下是它的一些功能: 可定制的模板 - 它有一个…

互联网网站建设月总结北京设计企业网站

Trace 是Rabbitmq用于记录每一次发送的消息,方便使用Rabbitmq的开发者调试、排错。 1、启动Tracing插件 在RabbitMQ中默认是关闭的,需手动开启。此处rabbitMQ是使用docker部署的 ## 进入rabbitMq中 docker exec -it rabbitmq1 bash ## 启动日志插件 r…

网站如何做支付系统网站流量少怎么办

1 AKConv原理 AKConv: Convolutional Kernel with Arbitrary Sampled Shapes andArbitrary Number of Parameters 摘要:基于卷积运算的神经网络在深度学习领域取得了令人瞩目的成果,但标准卷积运算存在两个固有的缺陷。一方面,卷积运算仅限于局部窗口,无法捕获其他位置的…

淘宝刷网站建设去除wordpress后台登录logo

在 web 应用程序开发中,数据的增、删、改、查(CRUD)操作是最基本的功能之一。Django 作为一个高效的 web 框架,提供了强大的 ORM(对象关系映射)功能,使得开发者可以通过 Python 代码直接操作数据库,而不需要编写繁琐的 SQL 语句。这种简化和抽象帮助开发者快速构建、测…

长春做网站推广东莞网站建设推广

很明了的一个常用参数图标: 更像细的一个参数说明: 由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来…

如何一键建淘宝客网站丽水高端网站建设

上一章的内容 练习!上一章表的内容!!!熟能生巧 先重新创建一个数据库 命令create database supermarket; 然后查看数据库、再切换到当前数据库。 查看数据库 : show databases; 切换到当前数据库: use supermarket;创建员工…

济南好的网站建设公司免费seo网站

文章目录 0 简介1 课题背景🚩 2 口罩佩戴算法实现2.1 YOLO 模型概览2.2 YOLOv32.3 YOLO 口罩佩戴检测实现数据集 2.4 实现代码2.5 检测效果 3 口罩佩戴检测算法评价指标3.1 准确率(Accuracy)3.2 精确率(Precision)和召回率(Recall)3.3 平均精…