当前位置: 首页 > news >正文

rpc 异步非阻塞 io 配置 线程池和队列

相关 

   雪崩 - 如何重试 - sla和重试风暴的双保证_个人渣记录仅为自己搜索用的博客-CSDN博客

接口耗时公式

   耗时= cpu时间 + io时间

线程池数量

最佳数目 =  1s / 平均cpu时间 * 内核数. 

最大平均cpu时间 = 接口耗时- all外部io时间. 结合gc , linux本身其他线程, 只会还少点.

当前我们是没有统计的.

小实验:

     如附录, 200次, 2000次调用 11毫秒,  20ms 基本是50个线程池 * 8核 = 400 . 

线程队列的作用

  线程队列的好处就是 线程数目满了之后, 放到队列里 .

  坏处是 堆积, 堆积的时间也会提现在api接口耗时中. 

修正后的接口耗时

      耗时 = 队列等待时间 + cpu时间 + io时间

    注意 :  队列等待时间 不是 真正执行时间.

突破资源边界后的稳定性问题

      队列等待时间 =  队列数 * 接口真正执行平均耗时 ( cpu时间 + io时间 )  > 上游超时时间.

      继续重试, 队列继续填满 ,队列永远满.

附录: 

     200次方法调用.

public void test(){StopWatch stopWatch=new StopWatch("t1");stopWatch.start("initStopWatch");stopWatch.stop();stopWatch.start("newHashMap");Map<String,Object> map= Maps.newHashMap();int count=200;for (int i = 0; i < 200; i++) {put(map, i);}stopWatch.stop();stopWatch.start("initJson");Map<String,Object> map2= Maps.newHashMap();map2.put("1",1);String value1=   JSON.toJSONString(map2);String nu1=value1;stopWatch.stop();stopWatch.start("json");String value= JSON.toJSONString(map);String nu=value;stopWatch.stop();System.out.println("count="+count+",costTimeMs="+stopWatch.getTotalTimeMillis()+",cost="+stopWatch.prettyPrint());}private void put(Map<String,Object> map, int i) {map.put("i"+i,1+i);}

200次方法调用 8毫秒

count=200,costTimeMs=103,cost=StopWatch 't1': running time = 103530566 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
000002786  000%  initStopWatch
008225391  008%  newHashMap
094716069  091%  initJson
000586320  001%  json

2000次调用 11毫秒

count=2000,costTimeMs=121,cost=StopWatch 't1': running time = 121049705 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
000002787  000%  initStopWatch
011 254 439  009%  newHashMap
106417291  088%  initJson
003375188  003%  json

2万次调用 36毫秒


count=20000,costTimeMs=224,cost=StopWatch 't1': running time = 224199250 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
000004506  000%  initStopWatch
036 672 628  016%  newHashMap
167984038  075%  initJson
019538078  009%  json

http://www.lryc.cn/news/93546.html

相关文章:

  • 【Turfjs的java版本JTS】前面讲了Turfjs可以实现几何计算,空间计算的功能,如果后端要做这项功能也有类似的类库,JTS
  • 从Window中先多瞥几眼
  • 【STM32训练—WiFi模块】第二篇、STM32驱动ESP8266WiFi模块获取天气
  • Maven私服
  • 手写RPC总结篇
  • c++11 标准模板(STL)(std::ios_base)成员类型与常量
  • 我用 ChatGPT 写 2023 高考语文作文:全国卷(一)
  • 4.java转义符,javadoc 标签
  • PinYin4j库的使用
  • 日志框架 --- Logback
  • QML 与 Python 交互
  • React基础教程(三):JSX语法
  • 软件测试岗位都是女孩子在做吗?
  • ARP协议,带你了解ARP协议
  • 基于Java汽车客运站管理系统设计实现(源码+lw+部署文档+讲解等)
  • 0203使用规则-索引-MySQL
  • LVS+Keepalived群集
  • 抖音矩阵系统源代码开发部署--源码搭建
  • 如何用Jmeter进行接口测试 ,这应该是全网最详细的教程了
  • C语言---malloc(0)会产生什么结果,真的是空指针吗?
  • 建模助手618 | 谁不囤点Revit插件我都会生气!
  • 【“职场程序员是否会保护自己的隐私?为何要求程序员之间保密薪资?”】
  • 企业工程管理系统源码之提高工程项目管理软件的效率
  • 创新指南 | 推动销售的17个可落地的集客式营销示例
  • ASEMI代理光宝光耦LTV-0314的应用与优势
  • Apikit 自学日记: Apikit 如何发起测试
  • python-glob模块_表格及代码样例
  • GitHub Copilot 最全安装、使用
  • C语言 指针(特别篇)
  • 【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(5月26日论文合集)