Beispiel #1
0
        static void Run(TestExecutor executor)
        {
            var mre      = new ManualResetEvent(false);
            var actionIn = new BenchActionIn(executor, mre);

            executor.Execute(actionIn);

            if (!mre.WaitOne(TimeSpan.FromMinutes(1)))
            {
                throw new TimeoutException($"{executor.Name} benchmark timed out.");
            }
            mre.Reset();

            var actionOut = new BenchActionOut(mre);

            for (int i = 0; i < Iterations; i++)
            {
                executor.Execute(actionOut);
            }

            if (!mre.WaitOne(TimeSpan.FromMinutes(1)))
            {
                throw new TimeoutException($"{executor.Name} benchmark timed out.");
            }
        }
Beispiel #2
0
        public void BenchSingleThreadEventExecutorWaiting()
        {
            var testSubjects = new Dictionary <string, IEventExecutor>
            {
                { "CompatibleConcurrentQueue", new TestExecutor("ConcurrentQueueCustom", TimeSpan.FromSeconds(1), new CompatibleConcurrentQueue <IRunnable>()) },
                { "ArrayQueue", new TestExecutor("ArrayQueue", TimeSpan.FromSeconds(1), PlatformDependent.NewFixedMpscQueue <IRunnable>(1 * 1000 * 1000)) }
            };

            var mre = new ManualResetEvent(false);

            CodeTimer.Benchmark(testSubjects, "STEE in loop ({0})", 1, this.output,
                                scheduler =>
            {
                var action = new BenchActionIn(scheduler, mre);
                scheduler.Execute(action);

                if (!mre.WaitOne(TimeSpan.FromMinutes(1)))
                {
                    throw new TimeoutException($"{scheduler.GetType().Name} benchmark timed out.");
                }
                mre.Reset();
            });

            CodeTimer.Benchmark(testSubjects, "STEE out of loop ({0})", 1, this.output,
                                scheduler =>
            {
                var action = new BenchActionOut(mre);
                for (int i = 0; i < Iterations; i++)
                {
                    scheduler.Execute(action);
                }

                if (!mre.WaitOne(TimeSpan.FromMinutes(1)))
                {
                    throw new TimeoutException($"{scheduler.GetType().Name} benchmark timed out.");
                }
                mre.Reset();
            });

            foreach (IEventExecutor scheduler in testSubjects.Values)
            {
                scheduler.ShutdownGracefullyAsync();
            }
        }