【问题标题】:How to proccess blocking time of a simulated queue in java for an M/M/2 system?java - 如何为M / M / 2系统处理java中模拟队列的阻塞时间?
【发布时间】:2017-05-12 11:33:30
【问题描述】:

大家好,模拟 M/M/1 的队列阻塞时间我想出了这个解决方案,但不幸的是它不是面向对象的,问题是我想用 M/M/2 模拟它系统,例如我用 19 初始化 lambda 和用 20 初始化 mu 只是为了简化计算任何解决方案、提示、代码示例将不胜感激。

public class Main {
    public static void main(String[] args) {
        final int MAX_ENTITY = 100000;
        final int SYSTEM_CAPACITY = 5;
        final int BUSY = 1;
        final int IDLE = 0;
        double lambda = 19, mu = 20;
        int blocked = 0;
        int queue_length = 0;
        int server_state = IDLE;
        int entity = 0;
        double next_av = getArivalRand(lambda);
        double next_dp = next_av + getDeparturedRand(lambda);
        while (entity <= MAX_ENTITY) {
            //Arrival
            if (next_av <= next_dp) {
                entity++;
                if (server_state == IDLE) {
                    server_state = BUSY;
                } else if (queue_length < SYSTEM_CAPACITY - 1) {
                    queue_length++;
                } else {
                    blocked++;
                }
                next_av += getArivalRand(lambda);
            } // Departure
            else if (queue_length > 0) {
                queue_length--;
                next_dp = next_dp + getDeparturedRand(mu);
            } else {
                server_state = IDLE;
                next_dp = next_av + getDeparturedRand(mu);
            }
        }
        System.out.println("Blocked Etity:" + blocked + "\n");
    }

    public static double getArivalRand(double lambda) {
        return -1 / lambda * Math.log(1 - Math.random());
    }

    public static double getDeparturedRand(double mu) {
        return -1 / mu * Math.log(1 - Math.random());
    }
}

编辑:

如果您不了解队列理论,请查看here

【问题讨论】:

  • 请客气,它表示服务器数量,更多信息请阅读这里en.wikipedia.org/wiki/M/M/1_queue
  • 这只是一个愚蠢的玩笑。您应该将链接编辑到您的问题中。
  • 您的问题具体是什么?即,您的代码做了哪些不该做的事情,或者不该做的事情?
  • @pjs 正如我所描述的,我以 M/M/1 的顺序实现了它我想实现 M/M/2,也符合 OOP 原则,我认为没有理由标记请
  • @Michael 谢谢我编辑了,请点赞,让我更快得到答案

标签: java arrays math queue simulation


【解决方案1】:

哦,男孩,您的代码需要认真重构才能实现M/M/2。 我创建了一个要点文件here,我认为它实现了你想要的, 在 gist 文件中,我创建了一个 Dispatcher 类来平衡两台服务器中的两个队列,并且我还用两个种子对其进行了模拟,它更像是面向对象的方法,

这是来自 gist 文件的示例代码,用于平衡 任务

if (server1.getQueueLength() < server2.getQueueLength()) 
   currentServer = server1;
else if (server1.getQueueLength() > server2.getQueueLength()) 
   currentServer = server2;
else if (currentServer == server1) 
   currentServer = server2;
else 
   currentServer = server1;

【讨论】:

    猜你喜欢
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2010-11-15
    相关资源
    最近更新 更多