解决方案 »

  1.   

    no way,一般来说java做不到。GC一来统统靠边站。精准的实时系统不建议用java,至少来说,不建议使用普通的JVM。可以用特殊设计过的JVM,Azul Zing,它对gc行为的控制更精准,更适合实时要求高的系统。但是Zing是商业JVM,很贵。
      

  2.   

    我现在有个项目,需求基本跟你这是一样的,我是通过每次循环检测时间差,系统自动调节sleep的时间来做的,结果是并不是非常的均匀,但是从一个时间段来说基本是均匀的。
      

  3.   

    这个肯定是可以实现的,不过要自己控制调节算法,好在这个算法在工控领域已经是很成熟的了。你google一下PID调节:
    一、什么叫P、I、D调节?1、P比例调节:是依据“偏差的大小”来动作,它的输出与输入偏差的大小成比例,比例调节及时有力但有余差。2、I积分调节:依据“偏差是否存在”来动作,它的输出与偏差对时间的积分成比例,其作用是消除余差。3、D微分调节:是依据“偏差的变化速度”来动作,它的输出与偏差的变化速度成比例,其效果是阻止被调参数的一切变化,有超前调节作用。你需要在系统中设置两个线程,一个实时检测运行速度(实际传送的速度),另一个根据实际速度与期望速度之间的差值设置调速参数(intervals)。与工控领域里的慢吞吞的变化量(温度,速度等等)不同,对于计算机来说这个动作可以做的非常迅速,所以你实际可以做的非常的平滑。
      

  4.   

    Java一般不这样做,可以试试C++
      

  5.   

    这位兄台说的动态调节我是有做过的,关键问题就是调速参数如何实现,通过java的sleep延时我们发现在500-1000毫秒的范围内对速度是有明显控制的,但是我们的速度控制从理论上要设置几十毫秒级别的延时,这种情况对速度控制就完全不准了。
      

  6.   

    Timer的scheduleAtFixedRate不知道行不行
      

  7.   

    sleep()中的时间是线程不会运行的最短时间。所以它不能保证到了时间后就能够马上运行。也就是说,在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行。所以会出现你说的,控制在几十毫秒的时候就不准了。
      

  8.   

    明白了,你说的是实时调度的问题,这个恐怕有不少人都有这种需要,你看看其他商业JVM,比如Oracle JRocket什么的。
    另外我觉得你可以换一个思路,既然你说的sleep()对速度的控制不好实现,你可以反过来考虑对性能的控制。因为从你的描述,我理解你对消息的时间分布不是特别关心,你关心的是CPU占用的时间分布。如果可以精确控制JVM的运行对CPU的占用,也就达到了你的目的,这个你研究一下看看是不是可行?
      

  9.   

    想均匀 的话 使用任务队列就好了。然后用future,一次执行10个任务,等任务都返回后再执行下10个任务
      

  10.   

    java实时性差是出了名的吧。
    解释性语言都这样的。
    试试c++ c
      

  11.   


    Java一般不这样做,可以试试C++..............
      

  12.   

    ScheduledThreadPoolExecutor的实时性要比直接用sleep好一些,可以试试
      

  13.   


    10 毫秒级别的实时控制系统用java,这好比是用叉子喝汤。
    Zing也做不到,通常Zing能在长期运行把GC,STW控制到50毫秒内。你们的构架师可以去跳楼了,太外行了,明显是C的活。
      

  14.   

    建议你学习一下,工业控制网是如何精准时间周期控制的。主要以下几条:
    1、专用控制器内置单任务系统。保证周期恒定。
    2、通讯网络,严格限定使用者,固定报文格式。
    3、网络接口板独立专用。
    4、网络使用现场总线。你用win和linux 那就别指望精准了。起码要中间有控制转换器。
      

  15.   

    我觉得把SQL语句写好,性能自然就上来了.你说对么
      

  16.   


    http://bbs.csdn.net/topics/390516692
      

  17.   

    buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会buhui不会
      

  18.   

    将报文匀速给MQ队列,沒必要。匀速给MQ的目的是什么?如担心消息拥堵,发送前检查队列是剩余消息数决定是否发送。
      

  19.   

    这个东西我觉得不可能用java实现,C/C++中的sleep都是有误差的,我记得在CSDN上的某个博客看到过
      

  20.   

    Java 是不适合做这类任务的,我也觉得你应该试一试C/C++。
      

  21.   

    Java也有实时技术,看一下也许有帮助
    http://www.ibm.com/developerworks/cn/java/j-rtj/