public MMnQueue_Modular(double hourlyArrivalRate, double hourlyServiceRate, int nServers, int seed = 0) : base(seed) { HourlyArrivalRate = hourlyArrivalRate; HourlyServiceRate = hourlyServiceRate; Generator = AddChild(new Generator(new Generator.Statics { InterArrivalTime = rs => Exponential.Sample(rs, TimeSpan.FromHours(1 / HourlyArrivalRate)) }, DefaultRS.Next())); Queue = AddChild(new Queue(double.PositiveInfinity, DefaultRS.Next())); Server = AddChild(new Server(new Server.Statics { Capacity = nServers, ServiceTime = (rs, load) => Exponential.Sample(rs, TimeSpan.FromHours(1 / HourlyServiceRate)), }, DefaultRS.Next())); Generator.OnArrive += () => Queue.RqstEnqueue(new Load()); Generator.OnArrive += Arrive; Queue.OnEnqueued += Server.RqstStart; Server.OnStarted += Queue.Dequeue; Server.OnReadyToDepart += Server.Depart; Server.OnReadyToDepart += load => Depart(); HC_InSystem = AddHourCounter(); /// Initial event Generator.Start(); }
internal Status(Simulator simulation) { _sim = simulation; WaitingQueue = new Queue <Customer>(); Serving = null; InSystemCounter = new HourCounter(_sim); ServedCustomers = new List <Customer>(); }
internal Status(Simulator simulation) { _sim = simulation; WaitingQueue = new Queue<Customer>(); Serving = null; InSystemCounter = new HourCounter(_sim); ServedCustomers = new List<Customer>(); }
public MMnQueue_Atomic(double hourlyArrivalRate, double hourlyServiceRate, int nServers, int seed = 0) : base(seed) { HourlyArrivalRate = hourlyArrivalRate; HourlyServiceRate = hourlyServiceRate; NServers = nServers; HC_InServer = AddHourCounter(); HC_InQueue = AddHourCounter(); HC_InSystem = AddHourCounter(); /// Initial event Arrive(); }
/// <param name="arrRate">Hour arrival rate to the system</param> /// <param name="svcRate1">Hourly service rate of Server 1</param> /// <param name="svcRate2">Hourly service rate of Server 2</param> /// <param name="bufferQSize">Buffer queue (Queue 2) capacity</param> public TandemQueue(double arrRate, double svcRate1, double svcRate2, int bufferQSize, int seed = 0) : base(seed) { HourlyArrivalRate = arrRate; HourlyServiceRate1 = svcRate1; HourlyServiceRate2 = svcRate2; Generator = AddChild(new Generator(new Generator.Statics { InterArrivalTime = rs => Exponential.Sample(rs, TimeSpan.FromHours(1 / HourlyArrivalRate)) }, DefaultRS.Next())); Queue1 = AddChild(new Queue(double.PositiveInfinity, DefaultRS.Next(), id: "Queue1")); Server1 = AddChild(new Server(new Server.Statics { Capacity = 1, ServiceTime = (rs, load) => Exponential.Sample(rs, TimeSpan.FromHours(1 / HourlyServiceRate1)), }, DefaultRS.Next(), id: "Server1")); Queue2 = AddChild(new Queue(bufferQSize, DefaultRS.Next(), id: "Queue2")); Server2 = AddChild(new Server(new Server.Statics { Capacity = 1, ServiceTime = (rs, load) => Exponential.Sample(rs, TimeSpan.FromHours(1 / HourlyServiceRate2)), }, DefaultRS.Next(), id: "Server2")); Generator.OnArrive += () => Queue1.RqstEnqueue(new Load()); Generator.OnArrive += Arrive; Queue1.OnEnqueued += Server1.RqstStart; Server1.OnStarted += Queue1.Dequeue; Server1.OnReadyToDepart += Queue2.RqstEnqueue; Queue2.OnEnqueued += Server1.Depart; Queue2.OnEnqueued += Server2.RqstStart; Server2.OnStarted += Queue2.Dequeue; Server2.OnReadyToDepart += Server2.Depart; Server2.OnReadyToDepart += load => Depart(); HcInSystem = AddHourCounter(); /// Initial event Generator.Start(); }
public ActivityHandler(Statics config, int seed = 0) : base(seed) { Config = config; _hc_Occupied = AddHourCounter(); }
public TestSandbox() { HC = AddHourCounter(); }
static void Main(string[] args) { InitWork(); //NormalizeAccount(); //TestAccount(); //RemoveAll(); //AddSubscribe(); //Console.WriteLine(DatabaseRecovery.Count()); //AddCBDs(); //DatabaseRecovery.Work(); //AuthorLocHistWorker.BackToOrigin(); //StatusSubscribeWorker.BackToOrigin(); //CBDWorker.BackToOrigin(); //AuthorCensusWorker.BackToOrigin(); //Console.WriteLine("all is well"); //return; scheduler = new Scheduler("SinaWeibo", new SchedulerSetting()); for (int j = 0; j < int.Parse(ConfigurationManager.AppSettings["WorkerThreadCount"]); ++j) { IPipeline worker = null; switch (ConfigurationManager.AppSettings["WorkerType"]) { case "WeiboAuthorCrawler": { //var tmp = new AuthorCensusWorker("WeiboUserCensus_" + j, scheduler); WeiboAuthorCrawler work = new WeiboAuthorCrawler("WeiboUserCensus_" + j, scheduler); work.DoOneJob(work); //worker = tmp; //JobCounter = tmp.CntData; //JobCounterDesc = "用户普查"; break; } case "WeiboSub": { var tmp = new Crawler.Core.Crawler.WeiboSubscribeCrawler("WeiboSub_" + j, scheduler); worker = tmp; tmp.DoOneJob(tmp); //JobCounter = tmp.CntData; JobCounterDesc = "微博订阅"; break; } case "WeiboCBD": { var tmp = new CBDWorker("WeiboCBD_" + j, scheduler); worker = tmp; WeiboCBDCrawler work = new WeiboCBDCrawler("WeiboCBD_" + j, scheduler); work.DoOneJob(work); JobCounter = tmp.CntData; JobCounterDesc = "CBD扫描"; break; } case "WeiboLocHistory": { var tmp = new AuthorLocHistWorker("WeiboLocHistory_" + j, scheduler); worker = tmp; WeiboAuthorLocHistoryCrawler work = new WeiboAuthorLocHistoryCrawler("WeiboLocHistory_" + j, scheduler); work.DoOneJob(work); JobCounter = tmp.CntData; JobCounterDesc = "地理信息"; break; } case "Forward": { WeiboForwardTrackingCrawler work = new WeiboForwardTrackingCrawler("Forward", scheduler); work.DoOneJob(work); var tmp = new LoginAccountWorker("Forward", scheduler); worker = tmp; JobCounter = tmp.CntData; JobCounterDesc = "关注订阅"; break; } case "Reply": { WeiboReplyTrackingCrawler work = new WeiboReplyTrackingCrawler("Reply" + j, scheduler); work.DoOneJob(work); var tmp = new RelationshipWorker("Reply" + j, scheduler); worker = tmp; JobCounter = tmp.CntData; JobCounterDesc = "粉丝&关注"; break; } default: break; } if (worker == null) { Console.WriteLine("工人类型配置项错误,请输入exit退出程序"); return; } scheduler.AddPipeline(worker, DateTime.Now); if (ConfigurationManager.AppSettings["WorkerType"] == "LoginAccountWorker") { break; } } _statusMonitor.ConnectToMonitorServer(); scheduler.Start(); }