JAVA如何精确控制速度!大神们请指点~ 延时java并发性能 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 no way,一般来说java做不到。GC一来统统靠边站。精准的实时系统不建议用java,至少来说,不建议使用普通的JVM。可以用特殊设计过的JVM,Azul Zing,它对gc行为的控制更精准,更适合实时要求高的系统。但是Zing是商业JVM,很贵。 我现在有个项目,需求基本跟你这是一样的,我是通过每次循环检测时间差,系统自动调节sleep的时间来做的,结果是并不是非常的均匀,但是从一个时间段来说基本是均匀的。 这个肯定是可以实现的,不过要自己控制调节算法,好在这个算法在工控领域已经是很成熟的了。你google一下PID调节:一、什么叫P、I、D调节?1、P比例调节:是依据“偏差的大小”来动作,它的输出与输入偏差的大小成比例,比例调节及时有力但有余差。2、I积分调节:依据“偏差是否存在”来动作,它的输出与偏差对时间的积分成比例,其作用是消除余差。3、D微分调节:是依据“偏差的变化速度”来动作,它的输出与偏差的变化速度成比例,其效果是阻止被调参数的一切变化,有超前调节作用。你需要在系统中设置两个线程,一个实时检测运行速度(实际传送的速度),另一个根据实际速度与期望速度之间的差值设置调速参数(intervals)。与工控领域里的慢吞吞的变化量(温度,速度等等)不同,对于计算机来说这个动作可以做的非常迅速,所以你实际可以做的非常的平滑。 Java一般不这样做,可以试试C++ 这位兄台说的动态调节我是有做过的,关键问题就是调速参数如何实现,通过java的sleep延时我们发现在500-1000毫秒的范围内对速度是有明显控制的,但是我们的速度控制从理论上要设置几十毫秒级别的延时,这种情况对速度控制就完全不准了。 Timer的scheduleAtFixedRate不知道行不行 sleep()中的时间是线程不会运行的最短时间。所以它不能保证到了时间后就能够马上运行。也就是说,在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行。所以会出现你说的,控制在几十毫秒的时候就不准了。 明白了,你说的是实时调度的问题,这个恐怕有不少人都有这种需要,你看看其他商业JVM,比如Oracle JRocket什么的。另外我觉得你可以换一个思路,既然你说的sleep()对速度的控制不好实现,你可以反过来考虑对性能的控制。因为从你的描述,我理解你对消息的时间分布不是特别关心,你关心的是CPU占用的时间分布。如果可以精确控制JVM的运行对CPU的占用,也就达到了你的目的,这个你研究一下看看是不是可行? 想均匀 的话 使用任务队列就好了。然后用future,一次执行10个任务,等任务都返回后再执行下10个任务 java实时性差是出了名的吧。解释性语言都这样的。试试c++ c Java一般不这样做,可以试试C++.............. ScheduledThreadPoolExecutor的实时性要比直接用sleep好一些,可以试试 10 毫秒级别的实时控制系统用java,这好比是用叉子喝汤。Zing也做不到,通常Zing能在长期运行把GC,STW控制到50毫秒内。你们的构架师可以去跳楼了,太外行了,明显是C的活。 建议你学习一下,工业控制网是如何精准时间周期控制的。主要以下几条:1、专用控制器内置单任务系统。保证周期恒定。2、通讯网络,严格限定使用者,固定报文格式。3、网络接口板独立专用。4、网络使用现场总线。你用win和linux 那就别指望精准了。起码要中间有控制转换器。 我觉得把SQL语句写好,性能自然就上来了.你说对么 http://bbs.csdn.net/topics/390516692 buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会 将报文匀速给MQ队列,沒必要。匀速给MQ的目的是什么?如担心消息拥堵,发送前检查队列是剩余消息数决定是否发送。 这个东西我觉得不可能用java实现,C/C++中的sleep都是有误差的,我记得在CSDN上的某个博客看到过 Java 是不适合做这类任务的,我也觉得你应该试一试C/C++。 Java也有实时技术,看一下也许有帮助http://www.ibm.com/developerworks/cn/java/j-rtj/ webwork2文件上传过滤文件类型和文件大小问题 fuckditor 2.6里关于flash预览的问题 servlet如何被代码显式的卸载? 关于字符集转换的问题,想和大家讨论一下. showModalDialog接受参数问题 JAVA中,怎样打开一个文件,保存文件. javabean的问题,请指点 上传时 ENCTYPE="multipart/form-data"的问题?十万火急! 如何实现当DB的一个表,有记录追加时,在客户端出现一个提示框,提示有记录被追加。 不同版本运行jstl结果不同 struts2怎么自定义拦截器 include标签缓存影响更新静态页面的问题
一、什么叫P、I、D调节?1、P比例调节:是依据“偏差的大小”来动作,它的输出与输入偏差的大小成比例,比例调节及时有力但有余差。2、I积分调节:依据“偏差是否存在”来动作,它的输出与偏差对时间的积分成比例,其作用是消除余差。3、D微分调节:是依据“偏差的变化速度”来动作,它的输出与偏差的变化速度成比例,其效果是阻止被调参数的一切变化,有超前调节作用。你需要在系统中设置两个线程,一个实时检测运行速度(实际传送的速度),另一个根据实际速度与期望速度之间的差值设置调速参数(intervals)。与工控领域里的慢吞吞的变化量(温度,速度等等)不同,对于计算机来说这个动作可以做的非常迅速,所以你实际可以做的非常的平滑。
另外我觉得你可以换一个思路,既然你说的sleep()对速度的控制不好实现,你可以反过来考虑对性能的控制。因为从你的描述,我理解你对消息的时间分布不是特别关心,你关心的是CPU占用的时间分布。如果可以精确控制JVM的运行对CPU的占用,也就达到了你的目的,这个你研究一下看看是不是可行?
解释性语言都这样的。
试试c++ c
Java一般不这样做,可以试试C++..............
10 毫秒级别的实时控制系统用java,这好比是用叉子喝汤。
Zing也做不到,通常Zing能在长期运行把GC,STW控制到50毫秒内。你们的构架师可以去跳楼了,太外行了,明显是C的活。
1、专用控制器内置单任务系统。保证周期恒定。
2、通讯网络,严格限定使用者,固定报文格式。
3、网络接口板独立专用。
4、网络使用现场总线。你用win和linux 那就别指望精准了。起码要中间有控制转换器。
http://bbs.csdn.net/topics/390516692
http://www.ibm.com/developerworks/cn/java/j-rtj/