我有一个多线程 Java 应用程序,它使用多个 CPU 密集型线程来收集信息。每隔几分钟,就会发现需要由程序的另一个线程处理的结果。将找到的结果添加到列表中,并通知其他相关线程(使用 Lock 和 Condition),然后处理找到的信息。我需要将这些信息从一个线程传递到另一个线程的时间延迟尽可能小。使用 System.currentTimeMillis() 测量唤醒和通知之间的时间时,延迟通常小于 5 毫秒,最常见的是小于或等于 1 毫秒。有时,延迟更大(10-20ms)。由于毫秒是计算机的宏单位,我认为可靠地小于 1ms 的延迟应该是可能的,这将有利于我的应用程序。
你知道更大延迟的原因是什么,或者我如何找到去哪里找?会不会是垃圾回收?或者线程唤醒的几毫秒变化是否被认为是正常的?
我在 Linux Ubuntu 虚拟专用服务器上使用 Java 版本 1.8.0。
附上程序设计的一个例子。运行它不会正确模拟我的生产程序观察到的延迟。“实际”程序使用大量内存、CPU,并且每隔几分钟只传输一点信息。我尝试过但未能简单地模拟这一点。
暮色呼如
守着星空守着你
相关分类