ThreadedBenchmark.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #region Copyright notice and license
  2. // Copyright 2015 gRPC authors.
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. #endregion
  16. using System;
  17. using System.Threading;
  18. using Grpc.Core;
  19. using Grpc.Core.Internal;
  20. using System.Collections.Generic;
  21. using System.Diagnostics;
  22. namespace Grpc.Microbenchmarks
  23. {
  24. public class ThreadedBenchmark
  25. {
  26. List<ThreadStart> runners;
  27. public ThreadedBenchmark(IEnumerable<ThreadStart> runners)
  28. {
  29. this.runners = new List<ThreadStart>(runners);
  30. }
  31. public ThreadedBenchmark(int threadCount, Action threadBody)
  32. {
  33. this.runners = new List<ThreadStart>();
  34. for (int i = 0; i < threadCount; i++)
  35. {
  36. this.runners.Add(new ThreadStart(() => threadBody()));
  37. }
  38. }
  39. public void Run()
  40. {
  41. Console.WriteLine("Running threads.");
  42. var threads = new List<Thread>();
  43. for (int i = 0; i < runners.Count; i++)
  44. {
  45. var thread = new Thread(runners[i]);
  46. thread.Start();
  47. threads.Add(thread);
  48. }
  49. foreach (var thread in threads)
  50. {
  51. thread.Join();
  52. }
  53. Console.WriteLine("All threads finished.");
  54. }
  55. }
  56. }