网站开发需求文档怎么写赣州市开发小程序

news/2025/9/22 23:23:37/文章来源:
网站开发需求文档怎么写,赣州市开发小程序,四川省建设厅官方培训网站,网站网站做庄是怎样做来源 | 编程技术宇宙责编 | 晋兆雨头图 | 付费下载于视觉中国背景曾经#xff0c;我面试的时候有两个最怕的。一怕问算法#xff0c;二怕问高并发。算法这个#xff0c;自从刷了不少LeetCode#xff0c;发现还是有套路可循的#xff0c;虽不敢说算法能力有多强#xff0c… 来源 | 编程技术宇宙责编 | 晋兆雨头图 | 付费下载于视觉中国背景曾经我面试的时候有两个最怕的。一怕问算法二怕问高并发。算法这个自从刷了不少LeetCode发现还是有套路可循的虽不敢说算法能力有多强至少没有以前那么怕了才怪。而第二个高性能高并发技术感觉有好多技术要学东学一点西学一点不成体系。直到有一次面试遇到了一个大牛问到了这方面结果被虐的体无完肤。幸运的是这位大牛不但技术一流还认真跟我交流了学习心得怎么样去有体系的系统去梳理这方面的技术知识而不是瞎学。CPU不管什么样的编程语言什么样的代码框架最终都是由CPU去执行完成的当然这么说不太准确也有GPU、TPU、协处理器等其他情况当然这不是本文探讨的重点。所以要想提高性能提高并发量首要问题就是如何让CPU跑的更快这个问题也是一直以来CPU厂商一直在努力追求的方向。如何让CPU更快CPU厂商做了两个方面的努力加快指令执行的速度加快CPU读取数据的速度对于第一个方向CPU执行指令的快慢是跟CPU的主频紧密相关的如何更快的取指令、指令译码、执行缩短CPU的指令周期提升主频在相当长一段时间里都是非常有效的办法。从几百MHz到如今到几GHzCPU主频有了长足的进步相同时间里能够执行的指令数变的更多了。对于第二个方向如何提升CPU读取数据的速度答案就是加缓存利用局部性原理将内存中经常会访问的数据搬运到CPU中这样大大提升了存取速度。从一级缓存到二级缓存乃至三级缓存CPU缓存的层级和容量也在不断提升读写数据的时间省了不少。但随着时间到推移尤其进入21世纪之后处理器厂商发现进一步提升主频变得越来越困难了CPU的缓存也很难进一步扩容。怎么办呢既然一个人干活的速度已经很难再提升那何不多找几个人一起干于是多核技术来了一个CPU里面有多个核心众人划桨开大船CPU的速度再一次腾飞甚至让一个核在“闲暇时间”利用“闲置资源”去执行另外的线程诞生了让一个核“同时”执行两个线程的超线程技术。上面简单交代了为了提升性能CPU所做的努力。但是光是CPU快是没用的还需要我们更好的去利用开发否则就是对CPU算力的浪费。上面提到了线程是的如何提高性能提高并发量使用多线程技术当然是一个非常好的思路。但多线程的引入就不得不提到两个跟线程有关的话题线程同步线程阻塞多个线程协同工作必然会引入同步的问题常规解决方案是加锁加锁的线程一般会进入阻塞。线程遇到阻塞了就需要切换而切换是有一定的成本开销的不仅是系统调度的时间开销还可能有CPU缓存失效的损失。如果线程频频加锁频频阻塞那这个损失就相当可观了。为了提升性能无锁编程技术就出现了利用CPU提供的机制提供更轻量的加锁方案。同时为了让切换后的线程仍然能够在之前的CPU核心上运行降低缓存损失线程的CPU亲和性绑定技术也出现了。现代操作系统都是以时间片的形式来调度分配给多个线程使用。如果时间片还没用完就因为这样或那样的原因将执行机会拱手相让那线程也太亏了。于是有人提出要充分利用CPU别让线程阻塞交出执行权自己在应用层实现多个执行流的调度这里阻塞了就去执行那里总之要把时间片充分用完这就诞生了协程技术阻塞了不要紧我还能干别的不要轻易发生线程切换。内存与CPU工作相关的第一亲密伙伴就是内存了二者协作才能唱好一出戏。提升内存访问的速度同样是高性能开发话题重要组成部分那如何提升呢硬件层面程序员是很难改变的咱们只好从软件层面下功夫。内存的管理经历了从实地址模式到分页式内存管理如今的计算机中CPU拿的的地址都是虚拟地址这中间就会涉及到地址的转换在这里就有文章可做有两个方向可以努力减少缺页异常使用大页技术现代操作系统基本上都会使用一个叫换页/交换文件的技术内存空间有限但进程越来越多对内存空间的需求越来越大用完了怎么办于是在硬盘上划分一块区域出来把内存中很久不用的数据转移到这块区域上来等程序用到的时候触发访问异常再在异常处理函数中将其从硬盘读取进来。可以想象如果程序访问的内存老是不在内存中而是被交换到了硬盘上就会频繁触发缺页异常那程序的性能肯定大打折扣所以减少缺页异常也是提升性能的好办法。从虚拟地址寻址真实的物理内存这个过程是CPU完成的具体来说就是通过查表从页表-一级页目录-二级页目录-物理内存。页目录和页表是存在内存中的毫无疑问内存寻址是一个非常非常高频的事情时时刻刻都在发生而多次查表势必是很慢的有鉴于此CPU引入了一个叫TLBTranslation Look- aside buffer的东西使用缓存页表项的方式来减少内存查表的操作加快寻址速度。默认情况下操作系统是以4KB为单位管理内存页的对于一些需要大量内存的服务器程序Redis、JVM、ElascticSearch等等动辄就是几十个G按照4KB的单位划分那得产生多少的页表项啊而CPU中的TLB的大小是有限的内存越多页表项也就越多TLB缓存失效的概率也就越大。所以大页内存技术就出现了4KB太小就弄大点。大页内存技术的出现减少了缺页异常的出现次数也提高了TLB命中的概率对于提升性能有很大的帮助。在一些高配置的服务器上内存数量庞大而CPU多个核都要通过内存总线访问内存可想而知CPU核数上去以后内存总线的竞争势必也会加剧。于是NUMA架构出现了把CPU核心划分不同的分组各自使用自己的内存访问总线提高内存的访问速度。I/OCPU和内存都够快了但这还是不够。我们的程序日常工作中除了一些CPU密集型的程序执行数学运算加密解密机器学习等等以外相当一部分时间都是在执行I/O如读写硬盘文件、收发网络数据包等等。所以如何提升I/O的速度是高性能开发技术领域一个重要的话题。因为I/O会涉及到与外设硬盘、网卡等的交互而这些外设又通常是非常慢相对CPU执行速度的所以正常情况下线程执行到I/O操作时难免会阻塞这也是前面在CPU部分提到过的。阻塞以后那就没办法干活了为了能干活那就开多个线程。但线程资源是很昂贵的没办法大量使用况且线程多了多个线程切换调度同样是很花时间的。那可不可以让线程执行I/O时不阻塞呢于是新的技术又出现了非阻塞I/OI/O多路复用异步I/O原来的阻塞I/O是一直等等到I/O的完成非阻塞I/O一般是轮询可以去干别的事过一会儿就来问一下好了没有但每个线程都去轮询也不是个事儿啊干脆交给一个线程去专门负责吧这就是I/O多路复用通过select/poll的方式只用一个线程就可以处理多个I/O目标。再然后再改进一下用epoll连轮询也不用了改用内核唤醒通知的机制同时处理的I/O目标还更多了。异步I/O就更爽了设置一个回调函数自己干别的事去了回头操作系统叫你来收数据就好了。再说回到I/O本身会将数据在内存和外设之间传输如果数据量很大让CPU去搬运数据的话既耗时又没有技术含量这是对CPU算力的很大浪费。所以为了将CPU从中解放出来又诞生了一门技术直接内存访问DMA把数据的传输工作外包出去交由DMA控制器来完成CPU只在背后发号施令即可。有了DMA再也不用麻烦CPU去执行数据的搬运工作。但对于应用程序而言想要把文件通过网络发送出去还是要把数据在内核态空间和用户态空间来回折腾两次这两步还得CPU出马去复制拷贝属于一种浪费为了解决这个问题提升性能又进一步产生了零拷贝技术彻底为CPU减负。算法架构CPU、内存、I/O都够快了单台计算机的性能已经很难提升了。不过现在的服务器很少是单打独斗了接下来就要把目光转移到算法、架构上来了。一台服务器搞不定那就用硬件堆出性能来分布式集群技术和负载均衡技术就派上用场了。这年头哪个后端服务没有数据库如何让数据库更快该轮到索引技术上了通过给数据库建立索引提升检索速度。但数据库这家伙的数据毕竟是存在硬盘上的读取的时候势必会慢要是大量的数据请求都怼上来这谁顶得住于是基于内存的数据库缓存Redis、Memcached应运而生毕竟访问内存比从数据库查询快得多。算法架构这一块的技术实在太多了也是从一个普通码农通往架构师的必经之路咱们下回再聊。总结高性能、高并发是后端开发永恒追求的话题。每一项技术都不是凭空出现的一定是为了解决某个问题而提出。我们在学这些技术的时候掌握它出现的原因和其他技术之间的关联在自己的大脑中建立一座技术知识层级图一定能事半功倍。关于本文你有什么想说的呢或者有什么重要技术被我遗漏了欢迎留言讨论。更多阅读推荐我是RedisMySQL大哥被我害惨了程序员应如何理解高并发中的协程一文聊“图”从图数据库到知识图谱编写贩卖《和平精英》游戏外挂5人被判刑苹果推出轻App码Firefox 84.0发布|极客头条赠书 | 实现病人数据自动分析建模Python能做的比你想象得更多

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

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

相关文章

深圳品牌建网站网络网站建设公司排名

上篇博文介绍了如何在LINQPad中输出StreamInsight查询结果。这篇文章将主要介绍StreamInsight基础查询操作中的过滤部分。 测试数据准备 为了方便测试查询,我们首先准备一个静态的测试数据源:var weatherData new[] {new { Timestamp new DateTime(201…

网站seo策划方案案例分析个人手机app免费制作

一、继承(Inheritance) 1. 概述 继承是面向对象编程的一种特性,允许我们定义一个类(称为子类或派生类)以继承另一个类(称为超类或基类)的功能。 2. 语法格式 public class Zi extends Fu {/…

网站开发方法简答题大型旅游网站源码 织梦

中国上海,2021年12月21日——今日,由工业和信息化部国际经济技术合作中心(工信部国合中心)与施耐德电气主办的“绿色智能制造创赢计划”第二季总决赛在上海举办。经过半年多的加速营培训、场景探访与联合方案开发,最终…

python做电商网站南通网站公司网站

“我在使用Excel表格工作时,需要插入一些行来填写数据。但是我不知道应该如何操作,有没有朋友可以支支招呀?” Excel是办公室工作中不可或缺的工具,它强大的数据处理能力使得工作变得高效。因此很多用户在使用电脑时或许都会用到E…

免费发做网站最全的wordpress 中文手册

1、有时候需要用到c的一些特性,封装,类等等。 2、研究一下如何更改之前c工程的内容,实现混合编程。 操作 1、keil设置 2、要重新建立一个main文件,后缀名是cpp,cpp才能调用cpp. 后面如果要用到c特性的,需要…

让自己的网站收录网站推广与维护有什么不同

Word的”交叉引用“和”插入题注“快捷键设置 在MSWord2021中,可以自定义设置快捷键。方法如下:文件-选项-自定义功能区-键盘快捷方式(自定义)。具体过程如图所示。 最后,按照上述流程将插入题注(Insert…

25.9.22 继续MySQL

学习了锁,inooDB引擎(未完),明天争取多花时间把MySQL全部看完,后面开始spring

使用divx查看docker image的文件结构

使用divx查看docker image的文件结构背景 Gitlab Runner启动的容器是临时容器,构建任务完成后容器立即销毁了。哪怕任务是失败的,调试起来很费劲。需要一个工具,来直接查看docker image的文件结构。 安装 推荐官方介…

用vs2015做网站教程互联网平台构建怎么写

简介 1.可以使用引号 ( ’ 或 " ) 来创建字符串 2.字符串也是一种序列,因此,通用的序列操作,比如索引,分片(切片),加法,乘法等对它同样适用 一.索引、切片、加法、乘法 x &…

松江网站设计公司注册资金500万实缴多少

一、前言 作为IT公司的管理者,我们应该一切从实际出发,理论和实际相结合,以终为始,带领公司(组织)不断前进。当然前进包括稳重求进,稳步前进,积极扩张,厚积薄发。等等。大多数公司追求的都是稳中求进,没有稳的进都是在冒比较大的风险。积极扩张,又容易出现较大的风…

网站做支付宝花呗分期百度关键词刷排名教程

更多Python学习内容:ipengtao.com Python中的高效并发编程,有几个重要的概念和工具可以帮助大家充分利用多核处理器和提高程序性能。本文将介绍一些关键的概念和示例代码,以帮助大家更好地理解Python中的高效并发编程。 多线程 vs. 多进程 在…

河北云网站建设失信人被执行人查询

一个教训是没上过榜也没什么好推荐的书有挺大概率不是本好书。我现在不太能耐心的去读这种指导手册,一是谈话的技巧需要在实战中才能有效提升,二是这方面对我来说不是关注的重点。所以几乎是刷刷的翻完了整本书。当然也不能说这本书就是烂书,…

建设公司网站新闻素材管理烟台牟平住房建设局网站

where标签 在上一节SQL 语句中加入了一个条件“11”,如果没有加入这个条件,那么可能就会变成下面这样一条错误的语句。 SELECT id,name,url,age,country FROM website AND name LIKE CONCAT(%,#{name},%)显然以上语句会出现 SQL 语法异常,但…

软件开发商网站制作网页的模板的网站

两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 GET - 从指定的资源请求数据。POST - 向指定的资源提交要被处理的数据GET 方法 请注意,查询字符串(名称/…

怎么建设影视卡网站设计师a 网站

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…

河北定制网站建设调试黄骅贴吧新鲜事

信息收集 探测存活主机 发现存活主机为192.168.217.133 探测开放端口 nmap -sT -p- 192.168.217.133 -oA ./ports 发现两个端口开放,分别是22 3128,同时探测到了8080端口,但是显示是关闭的状态。 UDP端口探测 nmap -sU --top-ports 20 1…

使用python读取windows注册表

在windows系统中,注册表 是系统定义的数据库,应用程序和系统组件在其中存储和检索配置数据。 注册表是一个分层数据库,其中包含对 Windows本身以及Windows上运行的应用程序和服务至关重要的数据。 因此我们还是不好…

当日总结

继承 继承是面向对象编程中的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以重用父类的代码,从而提高代码的复用性和模块化。在Java中,继承通过extends关键字实现,Java只…

3123004481

第一次个人编程作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/134…

淮安建设局网站最新产品上市代理加盟

jpa 手动预编译JPA提供了几种查询数据的方法。 可以根据各种标准(例如,使用的语言(SQL与JPQL)或查询是静态的(编译时间)还是动态的(执行时间))对此类替代方案进行分类。 …