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."); } }
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(); } }