最近写了一个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. window 安装淘宝镜像

    打开cmd, 输入如下命令 npm config set registry https://registry.npm.taobao.org 判断是否配置淘宝镜像成功 npm config get re ...

  2. django自定义管理类的save model和delete model记一次进一步了解

    业务背景: 最近在写一个个人博客网站,文章分类是一个自关联的两层分类.希望在点开分类时,显示一级分类.一级分类下的所有二级分类以及每个二级分类有多少个文章.最简单办法就是关联查询,查询出所有二级分类, ...

  3. Python学习笔记之7.5 - 定义有默认参数的函数》》》直接在函数定义中给参数指定一个默认值,默认参数的值应该是不可变的对象

    问题: 你想定义一个函数或者方法,它的一个或多个参数是可选的并且有一个默认值. 解决方案: 定义一个有可选参数的函数是非常简单的,直接在函数定义中给参数指定一个默认值,并放到参数列表最后就行了.例如: ...

  4. 记一次ajax文件上传

    一个新需求提交页面. 在页面提交的时候,使用的是,先上传文件再上传表单 在这里需要返回表单存储的文件地址,需要上传.所以.在上传文件之后会返回存储的地址. 这里犯的一个错误: 往input 的type ...

  5. win10任务栏图标设置“不合并标签但隐藏文字”

    设置如图不分组即可,下载链接 https://files-cdn.cnblogs.com/files/slyuan/7tt_setup.rar

  6. SpringMVC-nfjh

    SpringMVC springmvc项目创建 1.使用maven创建web项目结构 2.补充更改结构 3.springmvc-config.xml 1)添加包扫描(context命名空间) 2)添加 ...

  7. 百度地图api高亮显示指定区域,其余遮罩

    先放一张最后的效果图 主要功能:只显示天府新区(双流区+龙泉驿区)这一块,其他的地方就用半透明的遮罩层盖住,然后用Markers标注出每个项目的所在地点,当鼠标悬浮在标注点的时候就显示出项目名称. h ...

  8. AX2012 去掉浮点数后面的0

    static void Job116(Args _args) { str string1; real num1; ; num1 = 0.00; string1 = System.String::For ...

  9. 第14章 身份验证:使用Identity将用户添加到应用程序(ASP.NET Core in Action, 2nd Edition)

    本章包括 ASP.NET Core中web应用程序的身份验证工作原理 使用ASP.NET Core标识系统创建项目 向现有web应用添加用户功能 自定义默认ASP.NET Core标识UI 像ASPN ...

  10. 乘积小于K的子数组

    乘积小于K的子数组 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 示例 1: 输入:nums = [10,5,2,6], k = 10 ...