性能优化的几个维度

性能优化的几个维度
www.zeeklog.com  - 性能优化的几个维度

性能优化有迹可循,我们可以按照不同维度进行针对性的优化,在维度划分上可以分为如下三个维度。

第一维度:应用程序层面

  1. 缓存 缓存的数据结构设计很重要,没有一种数据结构是万能的。数据结构设计得越简单、单一,缓存数据的二次运算就越多。 此外,如果缓存的数据量很大,就要增加一个缓存淘汰算法,否则会白白浪费大量内存资源。

  2. 异步 异步有两种方式:

  • 线程异步。主要用于涉及到 I/O 的地方,像磁盘 I/O 和网络 I/O;
  • MQ异步。适用于更大的场景,通过 MQ 进行异步可以大大提高性能。
  1. 多线程并行和分布式并行 线程不要分得太多,否则管理成本会高,分布式系统中也存在管理成本。

  2. 延后运算懒加载 这个和缓存的思路相反,它适用于一些低频、运算耗时的数据。

  3. 批量,合并,归并 如果要短时间内频繁地传递多个数据到同一个目的地,尽量打包到一起,一次性传输,特别是I/O 的场景。如果系统是一个单点系统,将数据打包传输的性价比会非常高。

应用程序层面的优化方式还有很多。比如,用长链接代替频繁打开关闭的短链接、压缩、重用等等。

第二维度:组件层面优化

组件是指那些非业务性的东西,如中间件、数据库、运行时的环境(JVM、WebServer)等。

数据库的调优可以分为:SQL 语句、索引、连接池。

运行时的环境调优时,对 JVM 的调优主要是调优 GC 相关的配置,对 WebServer 的调优主要是针对连接相关的调优。

第三维度:系统层面调优

借助系统层面的一些技术指标,来观测并判断程序是否正常。比如,CPU、线程、网络、磁盘以及内存。

CPU 方面,大多数情况下关注这三个指标就够了:CPU 利用率、CPU 平均负载、CPU 上下文切换。

线程方面,除了线程数之外,还需要关注一下处于“挂起”状态的线程数量有多少。数量越多,意味着程序里锁竞争越激烈,需要通过其它方案来缩小锁的粒度、级别,或者避免用锁。

Read more

超快速,使用ChatGPT编写回归和分类算法

超快速,使用ChatGPT编写回归和分类算法

本文将使用一些 ChatGPT 提示,这些提示对于数据科学家在工作时非常重要。 微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩 以下是一些示例ChatGPT 提示的列表以及数据科学家的响应。 ChatGPT 提示 为决策树回归算法生成 python 代码。 下面是使用scikit-learn在 Python 中进行决策树回归的示例代码: import numpy as np import matplotlib.pyplot as plt from sklearn.tree import DecisionTreeRegressor # Generate random data rng = np.random.default_rng() x = 5 * rng.random(100) y = np.sin(x) + 0.

By Ne0inhk
力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法

力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法

993.二叉树的堂兄弟节点 难度:简单 题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。 我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。 只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。 示例: 示例 1: 输入:root = [1,2,3,4], x = 4, y = 3 输出:false

By Ne0inhk
1239.串联字符串的最大长度 关于字符串的回溯算法!

1239.串联字符串的最大长度 关于字符串的回溯算法!

题目: 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串, 如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。 请返回所有可行解 s 中最长长度。 提示: 1 <= arr.length <= 16 1 <= arr[i].length <= 26 arr[i] 中只含有小写英文字母 示例: 示例 1: 输入:arr = ["un","iq","ue"] 输出:4 解释:所有可能的串联组合是

By Ne0inhk