public Cola DeterminarColaDeProximoEventoArribo(Modelo modelo) { // Busca entre las colas posteriores aquella que tenga un servidor libre. foreach (var cola in this.ColasPosteriores) { var servidoresDeCola = modelo.DeterminarServidoresConLosQueTrabajaUnaCola(cola); var servidorLibre = servidoresDeCola.FirstOrDefault(s => !s.ServidorOcupado); if (servidorLibre != null) { return(servidorLibre.ColaPrevia); } } // Si no hay ninguno libre, tomamos la cola de menor logitud. return(this.ColasPosteriores.OrderBy(c => c.CantidadEnCola).FirstOrDefault()); }
public void RutinaEvento(Modelo modelo) { // Figura 1.8 pagina 32. this.Cola.AcumularAreaBajoQ(modelo); foreach (var servidor in modelo.Servidores) { servidor.AcumularAreaBajoB(modelo); } // Refactor if (this.Cola.NombreDelEventoDeArribo == Comunes.ArriboColaUno) // Si es "cola inicial". { modelo.EstablecerProximoEvento(this.Cola.NombreDelEventoDeArribo); } else { modelo.QuitarEventoDeConsideracion(this.Cola.NombreDelEventoDeArribo); } var sevidoresConLosQueTrabajaLaCola = modelo.DeterminarServidoresConLosQueTrabajaUnaCola(this.Cola); if (sevidoresConLosQueTrabajaLaCola.All(s => s.ServidorOcupado)) { this.Cola.AgregarALaColaDeEspera(modelo); } else { this.Cola.EstablecerDemoraCompletada(); Servidor servidorLibre = sevidoresConLosQueTrabajaLaCola.OrderBy(s => s.Prioridad).FirstOrDefault(s => !s.ServidorOcupado); servidorLibre.EstablecerServidorOcupado(); modelo.EstablecerProximoEvento(servidorLibre.NombreDelEventoDePartida); } }
public void AgregarALaColaDeEspera(Modelo modelo) { this.ColaDeTiemposDeArribo.Add(modelo.Reloj); // FI - Siempre el primero en llegar queda en la 1er posicion. //this.ColaDeTiemposDeArribo.Insert(0, modelo.Reloj); // LI - Siempre el ultimo en llegar queda en la 1er posicion. }
public void ComputarDemoraTotal(Modelo modelo) { // Se acumula el tiempo que estuvo esperando el primero en cola hasta ser atendido. this.TotalDemora = this.TotalDemora + modelo.Reloj - this.ColaDeTiemposDeArribo.FirstOrDefault(); }
} // times of arrival. public void AcumularAreaBajoQ(Modelo modelo) { this.AreaBajoQ = this.AreaBajoQ + this.CantidadEnCola * (modelo.Reloj - this.TiempoDelUltimoEvento); this.TiempoDelUltimoEvento = modelo.Reloj; }