algorithm - 优先考虑必须在计时器上运行的方法

标签 algorithm

这个问题与任何特定语言无关,而是解决一个问题。

我有一个计时器,它向机器人发送一个方法并请求传感器数据。

一些传感器非常重要,几乎应该总是被请求,而其他一些传感器并不那么重要,但应该不时读取。

想象一下我有一个计时器,并且在计时器中它要求一个方法,该方法将由下面的代码返回:

Timer_Tick()
{
   AskForData(SensorRequestList())
}

private int _tCliffState = 0;
private int _tCliffSignal = 0;
private int _tLight = 0;
//and 7 other 

private byte[] SensorRequestList()
{
    if (_tCliffState <= 5)
    {
        _tCliffState++;
        return RequestCliffStates();
    }
    if(_tCliffSignal < 1)
    {
        _tCliffSignal++;
        return RequestCliffSignals();
    }
    if(_tLight < 1)
    {
        _tLight++;
        RequestLightSignals();
    }
    //and more ifs!


    //reset all
    _tCliffState = 0;
    _tCliffSignal = 0;
    _tLight = 0;
    //...
}

如果我有 10 个方法,比如命名为 1,2,3,...10,优先级为 1,2,3...10,那么最好的方法是什么。

如何才能实现一个好的模式,以确保具有更高优先级的方法会请求更多?像这样的模式:

1,1,1,2,1,3,1,1,4,1,1,1,2,1,1,1,3,1,1,1,4 等等

最佳答案

如果数据定期出现,那么分析一段时间内收集的数据会更容易 - 例如毫秒一次、每秒一次、每天一次、每周一次或其他。

如果您最终需要保证性能 - 如果机器人没有至少每秒或其他时间收到某个传感器的消息,那么机器人可能会犯错误 - 如果您的程序按某种定期计划运行会更容易。

出于这些原因,我建议您通过重复发出固定数量的请求来收集数据,并且每个固定数量的请求之间有固定的时间间隔。我通常将这样固定数量的请求称为一个帧。

在帧中为非常重要的传感器读数提供自己的插槽,以便在每一帧中收集它们。让不太重要的传感器读数在它们之间共享一个槽,例如,您可以让 8 个传感器读数共享一个槽,每个传感器读数每 8 帧收集一次。如果你想让生活变得更复杂,你可以共享子时隙,因此 8 个真正不重要的传感器读数可以共享一个子时隙,并且每 64 帧收集一次。

在数据和原始值中保留某种时间戳通常是一个好主意。事实上,有些系统安排每帧拍摄一次快照并记录该快照的时间,然后在快照时间之后将值读出。那么所有的值都是在同一时刻读取的读数,并且该时刻是已知的。

关于algorithm - 优先考虑必须在计时器上运行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180040/

相关文章:

algorithm - 曼哈顿寻路是否支持对角线移动?

python - 在 Python 中计算 3D 网格的边界球

performance - 布谷鸟哈希中的 "new hash functions"是什么?

java - 使用递归打印所有数字序列

python - 我如何检查我的线路是否与 NFA 匹配?

c++ - DP - 计数硬币变化

algorithm - 替换方法 : Why this recurrence changes inequality & equality sign And Why inductive step used smaller values as a next value

algorithm - 从给定的 n 个数字数组中生成 m 个随机数

algorithm - 遗传/进化算法 - Painter

java - 当 hashcode() 实现返回常量值时,为什么哈希表会退化为链表?