最近写了一个demo:demo的github地址

一. 简单介绍

1. Server端

它是一个WebApi服务,把它当成一个黑盒就行了。

2. MiddleServer端

是重点,它是一个WebApi服务,包含一个GetValues接口和一个Query2接口。

Query2接口是一个简单的接口。

GetValues接口通过请求Server端的GetCounts接口和GetValues接口获取数据。

3. Client端

请求500次MiddleServer端的GetValues接口和请求500次Query2接口。

并行度200。

二. 这个demo主要测试什么?

  1. 测试MiddleServer端两个接口的吞吐量,MiddleServer端需要请求143000次Server端的接口。同时它需要响应Client端1000次请求。
  2. 测试MiddleServer端接口的平均耗时。

三. 想得出什么结论?

  1. MiddleServer端所面对的场景,使用异步实现肯定是优于使用多线程实现的。
  2. MiddleServer端的GetValues接口,需要请求286次Server端的接口,如果使用顺序执行的异步,那么耗时会很长,所以需要并行执行异步。
  3. MiddleServer端的GetValues接口,为什么不只请求1次Server端的接口呢?一是因为业务逻辑可能很复杂,二是因为数据量较大无法一次性获取。
  4. MiddleServer端的GetValues接口,为什么写了两层Parallel.ForEachAsync,一层不可以吗?如果第一层循环数据量很少,第二层循环存在数据倾斜,那么写两层Parallel.ForEachAsync可能会好一点。
  5. 虽然Client端测试了并发请求GetValues接口,但这样的接口,并不是为了高并发,需要做限流。但测试一下是必要的。
  6. 可能真的不建议写两层Parallel.ForEachAsync,因为会导致并行度较大。但是,我可以不写,你不能不支持。
  7. 由于精力和水平有限,希望看看别人用java和go语言怎么写的。
  8. 我觉得这里面可能是有坑的,想看看别人写的,会不会掉坑里。

四.最后

希望有兴趣的可以用java和go语言写一下这个demo。可以对比一下:

  1. 性能,这里并不专业,只是粗略对比,以及看一下大家对异步的理解,以及会不会掉坑里。
  2. 代码是否容易编写,容易阅读,容易维护。

最近写了一个demo,想看看java和go语言是怎么写的的更多相关文章

  1. opencv debug版本在linux下编译,并写了一个DEMO

    用如下方法编译opencv: git clone "https://github.com/opencv/opencv.git" mkdir opencv_debug cd open ...

  2. vue中指令写了一个demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 跟浩哥学自动化测试Selenium -- 我的第一个Demo (2)

    我的第一个Demo 开始写第一个 Demo 之前,先熟悉一下编写 Selenium 脚本的四个步骤: 驱动路径写法分析:System.setProperty 主要做用是设置系统属性,第一个参数为系统属 ...

  4. 使用android的mediaplayer做成 一个demo,欢迎测试使用

    附件是为一个定制视频产品而简单的写了一个demo,用来说明android的mediaplayer是如何使用的. http://files.cnblogs.com/guobaPlayer/palyerD ...

  5. 「小程序JAVA实战」 小程序手写属于自己的第一个demo(六)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-06/ 自己尝试的写一个小demo,用到自定义样式,自定义底部导航,页面之间的跳转等小功能.官方文档 ...

  6. 自己写的一个 java swing 的闹钟

    上一周新入职,把代码down下来之后,领导和我讲了一些大概的业务以及代码流程(领导是技术出身),领导让我自己先看看代码,然后我看了两天,觉得已经完全可以接任务了,但是领导却迟迟没有分配任务给我,虽然他 ...

  7. Mybatis笔记一:写一个demo

    什么是Mybatis? 在Java中,我们连接数据库可以使用最初级的JDBC,但是这样很麻烦,每次都要写好多,所以Mybatis出现了,Mybatis可以帮我们很简单很简单的实现与数据库的读取改写操作 ...

  8. 这是关于FastJson的一个使用Demo,在Java环境下验证的

    public class User { private int id; private String name; public int getId() { return id; } public vo ...

  9. 分享:写了一个 java 调用 C语言 开发的动态库的范例

    分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h   代码#pragma once#ifdef __cplusplusextern "C" {#e ...

  10. 闲来无事,用Java的软引用写了一个山寨的缓存

    闲来无事,用Java的软引用写了一个山寨的缓存 博客分类: java基础 众所周知java中的引用分为 StrongReference.SoftReference.WeakReference.Phan ...

随机推荐

  1. 初探AOP

    1.背景介绍 1.什么是AOP 1)在OOP(面向对象编程)中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.  2)AOP则将封装好的对象剖开,找出其中对多个 ...

  2. 配置vscode快速输出模板

    1.文件 ----> 首选项 -----> 用户片段:要配置什么文件的就搜什么文件的. 2.以HTML文件举例: 打开html.json: 输入以下代码: "Print to c ...

  3. 什么叫IOCSABS呢

    所谓的IOCSABS,就是全新的管理技术,是结合客户端管理与网络平台管理为一体的创新观念及技术,     IOCSABS? (what is IOCSABS?) 英文的全称为Integrated Of ...

  4. CF546E

    这题并不是太难 首先题目我们将每个城市拆点,由源点向一端连容量为初始人数的边,由另一端向汇点连容量为最后人数的边,然后按照题目要求从一端向另一端连容量无穷大的边 这样跑出最大流之后我们只需比较这个流量 ...

  5. python:包含’e’和‘-’的 str 转 float

    from functools import reduce def str2float(s): s = s.split('.') a = s[0] b = s[1] if a[0] == '-': a ...

  6. function | fastica

    fastica - Fast Independent Component Analysis FastICA for Matlab 7.x and 6.x Version 2.5, October 19 ...

  7. lgb文档学习

    1.L1和l2损失是什么意思? 相较于MSE,MAE有个优点,那就是MAE对离群值不那么敏感,可以更好地拟合线性,因为MAE计算的是误差y−f(x)的绝对值,对于任意大小的差值,其惩罚都是固定的. 2 ...

  8. Java8中Stream的用法

    Java8中Stream的用法 1.概述 Stream APl ( java.util.stream)把真正的函数式编程风格引入到Java中.这是目前为止对Java类库最好的补充,因为Stream A ...

  9. Spring Boot中编写单元测试

    编写单元测试可以帮助开发人员编写高质量的代码,提升代码质量,减少Bug,便于重构.Spring Boot提供了一些实用程序和注解,用来帮助我们测试应用程序,在Spring Boot中开启单元测试只需引 ...

  10. 1、HTTP的基本概念与交互模型

    1.上网的整个过程 假设我们点击了某网页上的一个链接,指向清华大学院系设置,其URL是:http://www.tsinghua.edu.cn/chn/yxsz/index.html.我们来分析一下整个 ...