最近写了一个demo,想看看java和go语言是怎么写的
最近写了一个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主要测试什么?
- 测试MiddleServer端两个接口的吞吐量,MiddleServer端需要请求143000次Server端的接口。同时它需要响应Client端1000次请求。
- 测试MiddleServer端接口的平均耗时。
三. 想得出什么结论?
- MiddleServer端所面对的场景,使用异步实现肯定是优于使用多线程实现的。
- MiddleServer端的GetValues接口,需要请求286次Server端的接口,如果使用顺序执行的异步,那么耗时会很长,所以需要并行执行异步。
- MiddleServer端的GetValues接口,为什么不只请求1次Server端的接口呢?一是因为业务逻辑可能很复杂,二是因为数据量较大无法一次性获取。
- MiddleServer端的GetValues接口,为什么写了两层Parallel.ForEachAsync,一层不可以吗?如果第一层循环数据量很少,第二层循环存在数据倾斜,那么写两层Parallel.ForEachAsync可能会好一点。
- 虽然Client端测试了并发请求GetValues接口,但这样的接口,并不是为了高并发,需要做限流。但测试一下是必要的。
- 可能真的不建议写两层Parallel.ForEachAsync,因为会导致并行度较大。但是,我可以不写,你不能不支持。
- 由于精力和水平有限,希望看看别人用java和go语言怎么写的。
- 我觉得这里面可能是有坑的,想看看别人写的,会不会掉坑里。
四.最后
希望有兴趣的可以用java和go语言写一下这个demo。可以对比一下:
- 性能,这里并不专业,只是粗略对比,以及看一下大家对异步的理解,以及会不会掉坑里。
- 代码是否容易编写,容易阅读,容易维护。
最近写了一个demo,想看看java和go语言是怎么写的的更多相关文章
- opencv debug版本在linux下编译,并写了一个DEMO
用如下方法编译opencv: git clone "https://github.com/opencv/opencv.git" mkdir opencv_debug cd open ...
- vue中指令写了一个demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 跟浩哥学自动化测试Selenium -- 我的第一个Demo (2)
我的第一个Demo 开始写第一个 Demo 之前,先熟悉一下编写 Selenium 脚本的四个步骤: 驱动路径写法分析:System.setProperty 主要做用是设置系统属性,第一个参数为系统属 ...
- 使用android的mediaplayer做成 一个demo,欢迎测试使用
附件是为一个定制视频产品而简单的写了一个demo,用来说明android的mediaplayer是如何使用的. http://files.cnblogs.com/guobaPlayer/palyerD ...
- 「小程序JAVA实战」 小程序手写属于自己的第一个demo(六)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-06/ 自己尝试的写一个小demo,用到自定义样式,自定义底部导航,页面之间的跳转等小功能.官方文档 ...
- 自己写的一个 java swing 的闹钟
上一周新入职,把代码down下来之后,领导和我讲了一些大概的业务以及代码流程(领导是技术出身),领导让我自己先看看代码,然后我看了两天,觉得已经完全可以接任务了,但是领导却迟迟没有分配任务给我,虽然他 ...
- Mybatis笔记一:写一个demo
什么是Mybatis? 在Java中,我们连接数据库可以使用最初级的JDBC,但是这样很麻烦,每次都要写好多,所以Mybatis出现了,Mybatis可以帮我们很简单很简单的实现与数据库的读取改写操作 ...
- 这是关于FastJson的一个使用Demo,在Java环境下验证的
public class User { private int id; private String name; public int getId() { return id; } public vo ...
- 分享:写了一个 java 调用 C语言 开发的动态库的范例
分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h 代码#pragma once#ifdef __cplusplusextern "C" {#e ...
- 闲来无事,用Java的软引用写了一个山寨的缓存
闲来无事,用Java的软引用写了一个山寨的缓存 博客分类: java基础 众所周知java中的引用分为 StrongReference.SoftReference.WeakReference.Phan ...
随机推荐
- docker搭建phpswoole实现http服务
一.创建Dockerfile FROM phpswoole/swoole # COPY ./www/ /var/www/ 二.同级目录下创建docker-compose.yml services: p ...
- react native 使用什么本地存储(asyncStorage 或者 H5的LocalStorage)
1. 官方文档上面 已经废弃 ,官方建议@react-native-community/async-storage代替.我看了这个确实写起来很麻烦,果断不使用了 2. 之后我使用 react-nati ...
- 48. Rotate Image via java
need to use scratch to find the pattern class Solution { public void rotate(int[][] matrix) { int n= ...
- uniapp的子组件,当父组件下来刷新时,子组件一同刷新。
最近做uniapp项目的时候,使用给父组件一个刷新属性,父组件有效果,但是子组件没有反应,网上查找了很多方法,最终采取通过刷新时,函数传值,子组件监听的方式.具体做法可以参照:https://blog ...
- window 版本下面建立linux命令行终端的方法
这个主要是解决dos系统命令行与linux命令行不匹配的问题. 因此microsoft shop 中开发了很多免费的app可供傻瓜式的安装使用.但是出现了不能下载的问题. 链接如下:https://w ...
- 关于JUnit
目录 一.单元测试 二.在LAB中的常用方法 一.单元测试 什么是单元测试呢?单元测试就是针对最小的功能单元编写测试代码.Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个 ...
- C语言历史与C++的区别
前期演变: C语言的前身是1967年由Martin Richards为开发操作系统和编译器而提出的两种高级程序设计语言BCPL和B.BCPL.Ken Thompson在BCPL的基础上,提出了新的功能 ...
- qtconsole和jupyter-notebook的对应启动命令行配置
jupyter-notebook: set conda_path=D:\use\program\Miniconda3 pushd %conda_path% call Scripts\activate. ...
- maven远程debug
1.修改tomcat服务器配置 打开tomcat/bin/catalina.sh 添加参数 CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_soc ...
- Windows10常用快捷键总结
--Windows10常用快捷键总结 1. Window键: 打开或关闭|开始菜单 2. Win + A 打开操作中心 3. Win + D 显示桌面 4. Win + E 打开计算机文件管理器 5. ...