JAVA如何精确控制速度!大神们请指点~

syp688 2013-11-27 06:10:37
加精
最近项目中的性能模块有一个需求就是精确控制报文的发送速度进行系统性能测试,简述下流程,根据指定数量,批量生成报文(每笔报文可以理解成一堆字符串),然后通过消息中间件MQ发给业务系统。但是要求按照一定的速度进行均匀发送,比如一秒钟发送10笔,目前的做法是计算出总笔数在没有延时的情况下发出去的耗时,算出大概速度再反推每笔之间应该加的延时毫秒数,但是发现当延时为几十毫秒的时候通过sleep方式进行延时速度完全不准。
希望高手指点下,如何实现这种精确的速度控制,注意要达到均匀的效果,比如一秒钟发送10笔,不能是头100毫秒全部发送完后面时间等待这样会造成CPU监控时图形的起伏。大神们都来指点吧!多谢
...全文
8718 65 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
自然80 2015-06-26
  • 打赏
  • 举报
回复
之前有个短信发送的项目,说是可以做到流速控制,可惜我不负责哪个项目,没机会好好问问, 但是心里一直想是怎么实现的。 今天看到这个帖子 里提到PID调节,我百度了下,了解了下原理,下载了个 ebisi-pid4j (开源的 pid实现,我只是用功能,没有检查是否真的实现)。 写个例子试了一下,果真可以自动调节,蛮开心的。
樱梦雪苹宝 2015-06-24
  • 打赏
  • 举报
回复
顶一下
淡的微笑 2015-05-05
  • 打赏
  • 举报
回复
先不说硬件级的问题。实时系统明显要求对线程、硬件有足够的控制力,我个人认为:在虚拟机上运行的语言就不要想他对硬件有多少控制力了,设计这种语言的初衷就是隔绝硬件和操作系统。至于解释性语言呢虽然可以控制操作系统,但对硬件的底层控制也不行,况且还要经过一层解释器,在对时间控制要求极其苛刻的实时系统中简直就是无法容忍的事情。所以最合适的恐怕就是编译型语言了,比较编译后的程序是以二进制的方式直接在系统中运行,而且有足够的底层控制力,比如说汇编/C/C++/D 语言之类的。 个人拙见!
lliiqiang 2015-05-05
  • 打赏
  • 举报
回复
计算出模拟位置,再控制到位置.
zsjpower 2015-04-21
  • 打赏
  • 举报
回复
试试看Timer+ExecutorService,效果应该比Thread.sleep好
qq_20200605 2015-04-21
  • 打赏
  • 举报
回复
浪里花 2014-04-08
  • 打赏
  • 举报
回复
引用 17 楼 u012983338 的回复:
大神们。。怎么获得积分啊。。。 大三学渣 需要6分积分 下载资源 提交期末考试作业。。。球大神指点。。
下免费的资源,再评论可以获取一个积分
miliermili 2014-04-08
  • 打赏
  • 举报
回复
我觉得这个可以参考一下TCP的原理,TCP怎么发送一个数据包,怎么进行快重传、快恢复,滑动窗口等,可以模仿一下TCP的思想
侧面 2014-04-08
  • 打赏
  • 举报
回复
mark先,等等看
AAA3096 2014-03-10
  • 打赏
  • 举报
回复
有说用别的语言的,说说用C/C++怎么实现吧
hills 2014-02-17
  • 打赏
  • 举报
回复
这个不太好做,因为你是客户端,性能不在你这边,如果业务系统保证1s内能响应,那么用MQ是可以的,在MQ的每个线程加上sleep的时间。
yebai 2014-02-16
  • 打赏
  • 举报
回复
利用linux时钟中断可以么? 这个感觉应该用C,即使是C也得有点内核进来、
beowulf2005 2013-12-10
  • 打赏
  • 举报
回复
引用 49 楼 xxxxxxxx86 的回复:
Java也有实时技术,看一下也许有帮助 http://www.ibm.com/developerworks/cn/java/j-rtj/
不错,但是好贵。 需要使用他家定制的Linux,单CPU一年license最便宜也要7000刀。 据说USA 海军的DDS滨海战斗舰上使用的是WebSphere RT。
xxxxxxxxxx86 2013-12-06
  • 打赏
  • 举报
回复
Java也有实时技术,看一下也许有帮助 http://www.ibm.com/developerworks/cn/java/j-rtj/
葉進生 2013-12-06
  • 打赏
  • 举报
回复
用心顶一下
子佚 2013-12-03
  • 打赏
  • 举报
回复
打个酱油
dafengche2k8 2013-12-01
  • 打赏
  • 举报
回复
Java 是不适合做这类任务的,我也觉得你应该试一试C/C++。
晓敬 2013-11-30
  • 打赏
  • 举报
回复
这个东西我觉得不可能用java实现,C/C++中的sleep都是有误差的,我记得在CSDN上的某个博客看到过
柔软的胖纸 2013-11-29
  • 打赏
  • 举报
回复
引用 17 楼 u012983338 的回复:
大神们。。怎么获得积分啊。。。 大三学渣 需要6分积分 下载资源 提交期末考试作业。。。球大神指点。。
http://bbs.csdn.net/topics/390516692
tpyhzau 2013-11-29
  • 打赏
  • 举报
回复
不熟悉java,用c++吧
加载更多回复(30)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧