最近由于工作要求,需要对一个串口通讯设备进行压力测试,要求连续持续对串口设备发送指令,无间隔,测试设备是否会死机。

要求做到毫秒级,测试第三方的工具,基本上都无法达到毫秒级,最少的也是10毫秒。

于是就自己写代码测试。通过.net写,发现最少能达到1毫秒,但是有遗漏,看日志如下

2024-03-31 22:11:02 164 00 00
2024-03-31 22:11:02 165 00 00
2024-03-31 22:11:02 166 00 00
2024-03-31 22:11:02 167 00 00
2024-03-31 22:11:02 169 00 00
2024-03-31 22:11:02 170 00 00
2024-03-31 22:11:02 171 00 00
2024-03-31 22:11:02 172 00 00
2024-03-31 22:11:02 173 00 00
2024-03-31 22:11:02 175 00 00
2024-03-31 22:11:02 176 00 00
2024-03-31 22:11:02 178 00 00
2024-03-31 22:11:02 179 00 00
2024-03-31 22:11:02 181 00 00
2024-03-31 22:11:02 183 00 00
2024-03-31 22:11:02 184 00 00
2024-03-31 22:11:02 186 00 00
2024-03-31 22:11:02 188 00 00
2024-03-31 22:11:02 190 00 00
2024-03-31 22:11:02 191 00 00
2024-03-31 22:11:02 192 00 00
2024-03-31 22:11:02 194 00 00
2024-03-31 22:11:02 196 00 00
2024-03-31 22:11:02 198 00 00
2024-03-31 22:11:02 199 00 00
2024-03-31 22:11:02 201 00 00

时间后的三位数字是毫秒,发现偶尔会少一个毫秒。

用java写了一段测试,效果如下

2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401190]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401191]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401192]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401193]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401194]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401195]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401196]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401197]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401198]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401199]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401200]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401201]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401202]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401203]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401204]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401205]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401206]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401207]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401208]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401209]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401210]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401211]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401212]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401213]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401214]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401215]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401216]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401217]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401218]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401219]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401220]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401221]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401222]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401223]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401224]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401225]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401226]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401227]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401228]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401229]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401230]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401231]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401232]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401233]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401234]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401235]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401236]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401237]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401238]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401239]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401240]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401241]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401242]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401243]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401244]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401245]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401246]---> 发送:FC FC FC 0A 00 02 20 00 28 2E

会发现同一毫秒发了好多条。

我用了十多年的.net的,今年才开始用java,这差距就这么大吗?

.net部分源码

        static void Main(string[] args)
{
SerialPortHelper sp = new SerialPortHelper();
sp.Open();
for (int i = 0; i < 1000; i++)
{
byte[] bs = new byte[2];
sp.Send(bs);
Trace.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss fff} {bs.ByteToHexString()}");
}
}
            while (true) {
i++;
if (i > totalTimes) {
break;
}
synchronized (lock) {
try {
long curCommMillis = System.currentTimeMillis();
String[] strList = new String[2];
strList[1] = "FC FC FC 0A 00 02 20 00 28 2E"; byte[] sendBuff = ByteHelper.hex2byte(strList[1]); // Send(sendBuff);
sp.writeBytes(sendBuff, sendBuff.length);
logger.debug(String.format("[%s]---> 发送:%s ", i, byteToString(sendBuff))); } catch (Exception ex) {
logger.error("main exception 01:", ex);
}
}
}

关键代码已经发出来了,其他无关的不影响主没有发。

大家可以讨论一下,是我使用的方法不对吗,请指正。

.net和java串口通讯压力测试对比的更多相关文章

  1. 简单的Java串口通讯应答示例

    java串口通讯第一次使用,找的资料都比较麻烦,一时没有理出头绪,自己在示例的基础上整理了一个简单的应答示例,比较简陋,但演示了java串口通讯的基本过程. package com.garfield. ...

  2. ASP.NET 页面缓存OutputCache用法实例(附ab压力测试对比图)

    本文主要介绍Web窗体页面中的使用方法,MVC中使用方法,大家自行百度. 一.简单一行指令即可实现 <%@ OutputCache VaryByParam=" %> 这样整个页面 ...

  3. MongoDB3.2版本与3.0版本写场景压力测试对比

    我们主要是为了测试journal对写操作性能的影响.分别测试了3.2版本,3.0版本在ramdisk,hdd上有journal,和没journal的情况. 发现一个很怪异的现象,3.2版本时候,随着y ...

  4. java串口通讯环境配置

    用java实现串口通信(windows系统下),配置如下: 1.comm.jar放置到 JAVA_HOME/jre/lib/ext;2.win32com.dll放置到 JAVA_HOME/bin;3. ...

  5. java web下串口通讯

       最近在做java串口通讯,主要是用个人电脑通过串口从RS485读取数据,并通过crc循环冗余校验,把接收正确的数据解析,插入数据库mysql,并用SSH技术把数据库数据以表格以及图表形式显示   ...

  6. Java利用Rxtx进行串口通讯

    最近在做传感器数据采集的工作,底层是基于Zigbee的无线传感网络,所有数据采集到Zigbee协调器上然后通知上位机数据采集完成,上位机通过USB转串口去读取数据就可以了.那么问题来了,如何进行串口通 ...

  7. 使用 JMeter 完成常用的压力测试 [转]

    讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测试.但是软件仅仅只是功能正确是不够的.在实际开发中,还有其它的非功能因素也起着决定性的因素,例如软件的响应速度.影响软件响应速度的 ...

  8. 使用 JMeter 完成常用的压力测试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. 【转】使用 JMeter 完成常用的压力测试

    本文介绍了 JMeter 相关的基本概念.并以 JMeter 为例,介绍了使用它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项.      ...

  10. 【转】使用JMeter 完成常用的压力测试(三)

    使用JMeter 完成常用的压力测试 发布时间: 2008-9-27 15:33    作者: 未知    来源: 网络转载 字体:  小  中  大  | 上一篇 下一篇 | 打印  | 我要投稿 ...

随机推荐

  1. Apipost参数描述的填写和参数描述库的使用

    请求参数的描述填写 对于header.query以及form-data和urlencode的body参数,我们在如下地方填写参数描述: 如图中所示,对于一个填写过的参数,我们可以在新建接口可以通过点击 ...

  2. 教你如何判断Java代码中异步操作是否完成

    本文分享自华为云社区<java代码实现异步返回结果如何判断异步执行完成>,作者: 皮牙子抓饭. 在许多应用程序中,我们经常使用异步操作来提高性能和响应度.在Java中,我们可以使用多线程或 ...

  3. lock锁,Semaphore信号量,Event事件,进程队列Queue,生产者消费者模型,JoinableQueue---day31

    1.lock锁 # ### 锁 lock from multiprocessing import Process,Lock import json,time # (1) lock的基本语法 " ...

  4. 亲测可行,Android Studio 查看源码出现 Source for ‘Android API xxx Platform’ not found 的解决方法

    亲测可行,Android Studio 查看源码出现 Source for 'Android API xxx Platform' not found 的解决方法 如标题中的问题,产生的原因就是 SDK ...

  5. 本机复制的内容粘贴不到VMware虚拟机里面的解决办法

    分析 VMware正确安装完linux虚拟机之后,这里以Ubuntu为例,如果你使用的默认配置,正常情况下就可以复制.粘贴和拖拽内容的,双方向都是支持的.如果不能复制和拖拽一般是vmware tool ...

  6. 【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)

    问题描述 在Azure Kubernetes 服务中,创建一个Internal Load Balancer服务,使用以下yaml内容: internallb.yaml apiVersion: v1 k ...

  7. 【Azure Developer】解答《美丽的数学》一书中P120页的一道谜题:寻找第四个阶乘和数

    一道谜题 在观看<美丽的数学>一书中,在120页中有一道谜题: 数字145被称为一个阶乘和数, 因为它具有以下有趣的属性,如果我们将它的各位数字的阶乘相加,会得到该数字本身 1! +4! ...

  8. 【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包

    问题描述 部署在App Service For Windows 中的网站使用 Java Spring Boot + 静态文件 (浏览器端使用Vue.js 与服务器端Java Spring Boot交互 ...

  9. Mapbox实战项目(1)-栅格图片图层实现地图方位展示

    需求背景 需要实现地图上展示一个类似于罗盘的标记,随着地图的缩放.切换.旋转等,能够在地图的中央指示出地图的方位. 系统自带的方位控件太小,在特殊业务场景下不够醒目. 技术选型 Mapbox 实现分析 ...

  10. Java 基本数据类型之间的运算规则

    1 /*** 2 * 基本数据类型之间的运算规则 3 * 4 * 前提:7中基本数据类型运算 5 * 6 * 1.自动类型提升: 7 * 当容量小的类型与容量大的数据类型的变量做运算时,结果自动提升为 ...