后端性能-batch 化的想法
项目中我们提高性能或者吞吐经常使用的是 batch 化,比如说获取帐号信息,我们1条1条查询可能不如我们一次查询100条性能高。
有的时候想这样是为什么呢?因为单个请求中间有网络往返、网络延迟等原因会更加频繁,或者是被请求的服务方MySQL 因为各种原因抖了一下或者什么的,都有可能。
有一次在楼下等电梯的时候,我们有6个电梯,如果一个电梯可以容纳10个人,楼层高度为10楼,那么我们的吞吐量就是 10 * 10 =100 人。
如果每个电梯一个人,那么这个时候一次往返就是6个人。
因为我们的电梯只有6个,所以在一定时间内每个电梯容纳的人多一点会增加我们系统的吞吐量。
早晨的时候物业会有一个工作人员,会在电梯那边,打开一个电梯,尽量让人多一点,然后这个电梯才会上去。我们系统中也可以借鉴,比如我们10s中一个窗口并且size = 100,如果 =100直接请求出去,如果10s中size没有到达100也会将请求发出去。
package main
import (
"fmt"
"time"
)
const _sizeNum = 10
func main() {
getCurrentTime("main start")
var timer = time.NewTicker(10 * time.Second)
for {
currentSize := getCurrentSize()
flag := false
if currentSize >= _sizeNum {
getCurrentTime("size enough")
flag = true
biz()
}
select {
case <-timer.C:
fmt.Println("timer")
if !flag {
fmt.Println("size not enough,timer send")
biz()
}
}
}
timer.Stop()
}
func getCurrentSize() int {
return 10
}
func biz() {
getCurrentTime("biz start")
time.Sleep(40 * time.Second)
getCurrentTime("biz end")
}
func getCurrentTime(str string) {
fmt.Println(str + time.Now().Format("2006-01-02 15:04:05"))
}
写了一个简单的demo,里面没有涉及到电梯数量的限制,也就是如果涉及电梯数量的限制,可以去开多个 go routine 去处理,需要判断go routine 的数量
demo中修改 currentSize 的值可以设置是否满足 batch 的条件
有一些临界资源,涉及到并发的话,需要考虑使用锁去解决
后端性能-batch 化的想法的更多相关文章
- keras系列︱利用fit_generator最小化显存占用比率/数据Batch化
本文主要参考两篇文献: 1.<深度学习theano/tensorflow多显卡多人使用问题集> 2.基于双向LSTM和迁移学习的seq2seq核心实体识别 运行机器学习算法时,很多人一开始 ...
- 面向.Net程序员的后端性能优化实战
最近2个月没做什么新项目 完全是对于旧的系统进行性能优化 避免超时 死锁 数据处理能力不够等常见的性能问题 这里不从架构方面出发 毕竟动大手脚成本比较高 那么我们以实例为前提 从细节开始 优化角度 一 ...
- web 性能忧化(IIS篇)
1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535. IIS Manager > ApplicationPools > Advanced Settings 2. ...
- Web系统开发构架再思考-前后端的完全分离
前言 前后端完全分离其实一直是Web开发人员的梦想,也一直是我的梦想,遥想当年,无论是直接在代码里面输出HTML,还是在HTML里面嵌入各种代码,都不能让人感到满意.期间的痛苦和纠结,我想所有Web开 ...
- 由 12306.cn 谈谈高并发+高负载网站性能技术
12306.cn 网站挂了,被全国人民骂了.我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.因为仓促,而且完全基于本人有限的经验和了解, 所以,如果有什么问题还请大家一起讨论 ...
- asp.net网站性能优化2则
摘要:Web服务器的性能优化有很多资料介绍了,多台主机负载均衡,查询结果的多级缓 存,数据库索引优化等都是常见的优化手段.随着后端优化空间越来越小,现在越来越多 的网站更注重前端性能的优化,就是浏览器 ...
- 由12306.cn谈谈网站性能技术
12306.cn网站挂了,被全国人民骂了.我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.因为仓促,而且完全基于本人有 限的经验和了解,所以,如果有什么问题还请大家一起讨论和 ...
- batch normalization学习理解笔记
batch normalization学习理解笔记 最近在Andrew Ng课程中学到了Batch Normalization相关内容,通过查阅资料和原始paper,基本上弄懂了一些算法的细节部分,现 ...
- 从零开始入门 K8s | etcd 性能优化实践
作者 | 陈星宇(宇慕) 阿里云基础技术中台技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 17 讲. 导读:etcd 是容器云平台用于存储关键元信息的组件.阿 ...
- SpringBoot+Jpa+SpringSecurity+Redis+Vue的前后端分离开源系统
项目简介: eladmin基于 Spring Boot 2.1.0 . Jpa. Spring Security.redis.Vue的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 ...
随机推荐
- Raft学习笔记
0.前言 Raft 作为一种强一致性的共识算法,被广泛应用于分布式系统中,如 etcd.Consul 等.最近阅读了一篇关于 Raft 的技术文章,收获颇多,因此写下此学习笔记,记录其中的关键概念与个 ...
- 独家推荐!这款端到端AI测试工具 Testim,让效率飙升!(支持移动端、Web端)
在当今快速发展的软件开发时代,确保软件质量成为每个开发团队的首要任务. 随着人工智能(AI)和机器学习(ML)技术的飞速发展,AI测试工具应运而生,为软件测试领域带来了革命性的变化.今天,我要向大家强 ...
- Web前端入门第 26 问:CSS 浏览器兼容性怎么查?
学编码之前,当先学排查问题的能力. 在那个 IE 浏览器 当道的时代,前端开发简直就是刀耕火种一般,一个简单的圆角模块,嘿...不好意思,它不支持,用图片吧. 但凡经历过 IE 的洗礼,就会知道当时哪 ...
- C 图上的遍历算法
图上的遍历算法 广度优先搜索 BFS 概念 广度优先搜索(Breadth-First Search)是一种图遍历算法,用于在图或树中按层次逐层访问节点.它从源节点(起始节点)开始,首先访问源节点的所有 ...
- .net WorkFlow 流程介绍
WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...
- Spring Cloud Bus服务总线
一.Spring Cloud Bus是用轻量的消息代理将分布式的节点连接起来,可以用于广播配置文件的更改或者服务的监控管理,也就是消息总线可以为微服务做监控,也可以实现应用程序之间相互通信,Sprin ...
- macOS 软件推荐
五星推荐: ezip 解压压缩文件 https://ezip.awehunt.com/ (免费) microsoft To Do : https://todo.microsoft.com/tasks ...
- symfony或doctrine报错:Object of class App\Entity\* could not be converted to string
报错: Catchable Fatal Error: Object of class App\Entity\ProjectType could not be converted to string 版 ...
- 关于Bevy中的原型Archetypes
认识Bevy中的原型 Bevy是基于ECS(Entity-Component-System)架构的游戏引擎,其中的Entity实体是游戏中的一个基本对象,但实体本身通常只是一个标识id,它不包含任何具 ...
- 小模型工具调用能力激活:以Qwen2.5 0.5B为例的Prompt工程实践
在之前的分析中,我们深入探讨了cline prompt的设计理念(Cline技术分析:prompt如何驱动大模型对本地文件实现自主变更),揭示了其在激发语言模型能力方面的潜力.现在,我们将这些理论付诸 ...