Пример #1
0
        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();
        }
Пример #2
0
 internal Status(Simulator simulation)
 {
     _sim            = simulation;
     WaitingQueue    = new Queue <Customer>();
     Serving         = null;
     InSystemCounter = new HourCounter(_sim);
     ServedCustomers = new List <Customer>();
 }
Пример #3
0
 internal Status(Simulator simulation)
 {
     _sim = simulation;
     WaitingQueue = new Queue<Customer>();
     Serving = null;
     InSystemCounter = new HourCounter(_sim);
     ServedCustomers = new List<Customer>();
 }
Пример #4
0
        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();
        }
Пример #5
0
        /// <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();
        }
Пример #6
0
 public ActivityHandler(Statics config, int seed = 0) : base(seed)
 {
     Config       = config;
     _hc_Occupied = AddHourCounter();
 }
Пример #7
0
 public TestSandbox()
 {
     HC = AddHourCounter();
 }
Пример #8
0
        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();
        }