gpt4 book ai didi

java - 如何使用 sleep 时间在java中生成超过1000个事件/秒

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:08 29 4
gpt4 key购买 nike

我有一个生成器,可以为 Flink CEP 生成事件,其代码如下。基本上,我正在使用 Thread.sleep() ,并且我在某处读到即使我们使用 System.nanoTime() ,java 也无法 hibernate 少于 1 毫秒。生成器的代码是

public class RR_interval_Gen extends RichParallelSourceFunction<RRIntervalStreamEvent> {

Integer InputRate ; // events/second
Integer Sleeptime ;
Integer NumberOfEvents;

public RR_interval_Gen(Integer inputRate, Integer numberOfEvents ) {
this.InputRate = inputRate;
Sleeptime = 1000 / InputRate;
NumberOfEvents = numberOfEvents;
}

@Override
public void run(SourceContext<RRIntervalStreamEvent> sourceContext) throws Exception {


long currentTime;
Random random = new Random();
int RRInterval;
int Sensor_id;

for(int i = 1 ; i <= NumberOfEvents ; i++) {
Sensor_id = 2;
currentTime = System.currentTimeMillis();

// int randomNum = rand.nextInt((max - min) + 1) + min;
RRInterval = 10 + random.nextInt((20-10)+ 1);

RRIntervalStreamEvent stream = new RRIntervalStreamEvent(Sensor_id,currentTime,RRInterval);

synchronized (sourceContext.getCheckpointLock())
{
sourceContext.collect(stream);
}
Thread.sleep(Sleeptime);
}
}

@Override
public void cancel() {

}

}

我将在这里用简单的话说明我的要求。我希望生成器类生成事件,比如说 1200 Hz 的心电图流。该生成器将接受输入速率和我们必须生成流的总时间等参数。

到目前为止一切顺利,问题是我需要每秒发送超过 1000 个事件。如何使用生成值U[10,20]的生​​成器函数来做到这一点?

另外,如果我使用错误的方式在上面每秒生成 x 个事件数,请告诉我。

Sleeptime = 1000 / InputRate;

提前致谢

最佳答案

sleep 时间最短Windows systems约为 10 毫秒,在 Linux 和 Macintosh 中为 1 毫秒,如 mentioned here

The granularity of sleep is generally bound by the thread scheduler's interrupt period. In Linux, this interrupt period is generally 1ms in recent kernels. In Windows, the scheduler's interrupt period is normally around 10 or 15 milliseconds

通过我的研究,我了解到在 Java 中使用纳米时间 sleep 不会有帮助,因为问题出现在操作系统级别。如果您想以受控方式以到达率 > 1000 发送数据,则可以使用实时操作系统 (RTOS) 来完成,因为它们的 hibernate 时间不到一毫秒。现在,我想出了另一种方法,但在这个解决方案中,到达间隔时间不会不断分布。

假设您希望3000个事件/秒的到达率,那么您可以创建一个for循环,迭代3次以在每次迭代中发送数据,然后 hibernate 1ms。因此,对于 3 个元组,到达间隔时间将彼此接近,但问题将得到解决。这可能是一个愚蠢的解决方案,但它确实有效。

如果有更好的解决方案,请告诉我。

关于java - 如何使用 sleep 时间在java中生成超过1000个事件/秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47169720/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com