程序三高的方法

news2024/11/18 13:28:24

程序三高的方法

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.1)高并发
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

程序三高的方法

需求:

设计思路

"程序三高"指的是代码复杂、耦合度高、难以维护的情况。 解决方法如下:

  1. 重构:通过重构
    "程序三高"指的是代码复杂、耦合度高、难以维护的情况。 解决方法如下:

  2. 重构:通过重构,将复杂的代码结构进行简化,去除不必要的代码,同时优化代码的逻辑和结构。这将有助于减少代码的复杂性和耦合度,使代码更易于维护。

  3. 拆分模块:将复杂的模块分解成更小的模块,各个模块之间的关系明确,这有助于代码的复杂性和耦合度降低,同时方便维护。

  4. 使用设计模式: 设计模式是一些被广泛认可的最佳实践,这些实践可以帮助我们写出易于扩展、可维护、易于理解的代码。通过使用设计模式,可以将程序的耦合度降到最低。

  5. 代码审查:通过定期的代码审查,可以发现代码中的问题,避免复杂的代码影响程序可维护性,确保程序的质量和稳定性。

  6. 测试:进行充分的测试可以确保代码的质量和稳定性。测试用例覆盖率越高,程序的稳定性就越高,维护起来就越容易。

实现思路分析

1.1)高并发

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一。当多个进程或线程同时(或着说在同一段时间内)访问同一资源时会产生并发问题,因此需要通过专门的设计来保证系统能够同时(并发)正确处理多个请求。

2)高性能

简单地说,高性能(High Performance)就是指程序处理速度快、耗能少。与性能相关的一些指标如下:

响应时间:系统对请求做出响应的时间。例如系统处理一个 HTTP 请求需要 200ms,这个 200ms 就是系统的响应时间。
吞吐量:单位时间内处理的请求数量。
TPS:每秒响应事务数。
并发用户数:同时承载能正常使用系统功能的用户数量。
高并发和高性能是紧密相关的,提高应用的性能,可以提高系统的并发能力。

应用性能优化时,对于计算密集型和 I/O 密集型还是有很大差别,需要分开来考虑。

水平扩展(Scale Out):只要增加服务器数量,就能线性扩充系统性能。通常增加服务器资源(CPU、内存、服务器数量),大部分时候是可以提高应用的并发能力和性能 (前提是应用能够支持多任务并行计算和多服务器分布式计算才行)。但水平扩展对系统架构设计是有要求的,难点在于:如何在架构各层进行可水平扩展的设计。

3)高可用
高可用性(High Availability)通常用来描述一个系统经过专门的设计,从而减少停工时间,保证服务的持续可用。

如高可用性集群就是保证业务连续性的有效解决方案。
缓存分类
1)本地缓存
使用进程内成员变量或者静态变量,适合简单的场景,不需要考虑缓存一致性、过期时间、清空策略等问题。

可以直接使用语言标准库内的容器来做存储。

2)分布式缓存
当缓存的数据量增大以后,单机不足以承载缓存服务时,就要考虑对缓存服务做水平扩展,引入缓存集群。

将数据分片后分散存储在不同机器中,如何决定每个数据分片存放在哪台机器呢?一般是采用一致性 Hash 算法,它能够保证在缓存集群动态调整,在不断增加或者减少机器时,客户端访问时依然能够根据 key 访问到数据。

常用的组件有 Memcache、 Redis Cluster 等,也可以在高性能内存存储 Redis 的基础上,提供分布式存储的解决方案

  1. 预处理与延后处理

  2. 池化
    内存、连接、线程这些都是资源,创建线程、分配内存、数据库连接这些操作都有一个特征, 那就是创建和销毁过程都会涉及到很多系统调用或者网络 I/O,每次都在请求中去申请创建这些资源,就会增加请求处理耗时。如果我们用一个“容器(池)”把它们保存起来,下次需要的时候,直接拿出来使用,就可以避免重复创建和销毁所浪费的时间。

  3. 异步(回调)
    对于处理耗时的任务,如果采用同步的方式,会增加任务耗时,降低系统并发度。此时可以通过将同步任务变为异步进行优化。

异步:服务员被问烦了,就在点完餐后给我们一个号码牌,每次准备好了就会在服务台叫号,这样我们就可以在被叫到的时候再去取餐,中途可以继续干自己的事。

  1. 消息队列
    5.1 服务解耦
    5.2 异步处理
    5.3 流量削峰

5.4 总结

  1. 批量处理
    在涉及到网络连接、I/O 等情况时,将操作批量进行处理能够有效提高系统的传输速率和吞吐量。

  2. 零拷贝
    高性能的服务器应当避免不必要数据复制,特别是在用户空间和内核空间之间的数据复制。 比如 HTTP 静态服务器发送静态文件的时候,一般我们会这样写:

参考资料和推荐阅读

参考资料
官方文档
开源社区
博客文章
书籍推荐

  1. https://www.bbsmax.com/A/D854NXEWzE/

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~

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

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

相关文章

【SpringBoot】多环境配置和启动

环境分类,可以分为 本地环境、测试环境、生产环境等,通过对不同环境配置内容,来实现对不同环境做不同的事情。 SpringBoot 项目,通过 application-xxx.yml 添加不同的后缀来区分配置文件,启动时候通过后缀启动即可。 …

[架构之路-231]:计算机硬件与体系结构 - 性能评估汇总,性能优化加速比

目录 一、计算机体系结构 二、计算机性能评估 2.1 分类方法1 2.2 分类方法2 三、常见的专项性能测试工具 3.1 浮点运算性能(FLOPS) 3.2 综合理论性能法 3.3 历史基准测试(跑分软件):通过运行典型的综合性的程序…

012-第二代硬件选型

第二代硬件选型 文章目录 第二代硬件选型项目介绍重新换平台缘由X86 && Arm 架构切换 ARM Linux 硬件选型系统确定Qt 版本确定总结一下 关键字: Qt、 Qml、 Arm、 X86、 linux 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QM…

Java笔记七(封装,继承与多态)

封装 该露的露,该藏的藏 程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用 封装(数据的隐藏) 通常,…

mysql面试题20:有哪些合适的分布式主键方案

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:有哪些合适的分布式主键方案? UUID:UUID通常是由一个二进制的128位整数表示,可以保证全局的唯一性。在Java中,可以通过UUID类生成一个UUID。例…

《计算机视觉中的多视图几何》笔记(13)

13 Scene planes and homographies 本章主要讲述两个摄像机和一个世界平面之间的射影几何关系。 我们假设空间有一平面 π \pi π,平面上的一点为 x π x_{\pi} xπ​。 x π x_{\pi} xπ​分别在两幅图像 P , P ′ P, P P,P′上形成了 x , x ′ x, x x,x′。 那…

基于Java的流浪动物救助平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

安卓教材学习

文章目录 教材学习第一行代码 Android 第3版环境配置gradle配置下载包出现问题 教材学习 摘要:选了几本教材《第一行代码 Android 第3版》,记录一下跑案例遇到的问题,和总结一些内容。 第一行代码 Android 第3版 环境配置 gradle配置 gradl…

全志ARM926 Melis2.0系统的开发指引⑥

全志ARM926 Melis2.0系统的开发指引⑥ 编写目的9. 系统启动流程9.1. Shell 部分9.2.Orange 和 desktop 部分9.3. app_root 加载部分9.4. home 加载部分 10. 显示相关知识概述10.1. 总体结构10.2. 显示过程10.3. 显示宽高参数关系 -. 全志相关工具和资源-.1 全志固件镜像修改工具…

【网站】让自己的个人主页能被Google检索

参考: https://zhuanlan.zhihu.com/p/129022264

计算机毕业设计 基Javaweb的校园订餐系统的设计与实现Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

C++设计模式-生成器(Builder)

目录 C设计模式-生成器(Builder) 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-生成器(Builder) 一、意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、…

全志ARM926 Melis2.0系统的开发指引⑤

全志ARM926 Melis2.0系统的开发指引⑤ 编写目的8. 固件修改工具(ImageModify)使用8.1.界面说明8.2.操作步骤8.2.1. 配置平台8.2.2. 选择固件8.2.3. 选择要替换的文件8.2.4. 替换文件8.2.5. 保存固件 8.3.注意事项8.4.增加固件修改权限设置8.4.1. 概述8.4.2. 操作说明8.4.2.1.打…

字符串函数的模拟实现

引言:对于字符串来说,我们通常想要对其完成各种各样的目的,不管是排序还是查找都是最普遍的功能,而我们的C语言中也包含着一系列函数是为了实现对字符串的一些功能,今天我们就来介绍他们。 strlen函数: 求字…

基于SpringBoot的车辆管理系统

目录 前言 一、技术栈 二、系统功能介绍 员工信息管理 证件信息管理 车辆信息管理 事故登记管理 事故登记 保养登记 违章登记 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实…

C++设计模式-原型(Prototype)

目录 C设计模式-原型(Prototype) 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-原型(Prototype) 一、意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 二、适用性 当…

@ConfigurationProperties配置绑定~

ConfigurationProperties注解是Spring Boot中的一个注解,用于将配置文件中的属性值绑定到Java类中的字段上。 ConfigurationProperties注解的作用包括: 实现配置文件属性和Java类字段的映射,简化了读取配置文件的操作。 可以指定配置文件中…

1.3.OpenCV技能树--第一单元--图像的基础操作(基础篇)

文章目录 1.文章内容来源2.图像的基本操作2.1.图像加载2.2.图像显示2.3.数据读取2.4.截取图像2.5.颜色通道提取2.5.1.保留红色处理2.5.2.保留绿色处理2.5.3.保留蓝色处理 3.易错点总结与反思 1.文章内容来源 1.题目来源: 2.资料来源:https://edu.csdn.net/skill/opencv/opencv…

ALSA pcm接口的概念解释

PCM(数字音频)接口 PCM缩写: Pulse Code Modulation脉冲调制编码,我们理解为通过一定连续时间周期产生数字音频并带有音量样本的处理过程. 模拟信号被记录通过模拟到数字转换器,数字值(也就是某个特定时刻的音量值)获得来自ADC可以进一步处理,接下的图片展示的是个sine wavefor…

【BBC新闻文章分类】使用 TF 2.0和 LSTM 的文本分类

一、说明 NLP上的许多创新是如何将上下文添加到词向量中。常见的方法之一是使用递归神经网络