fork download
  1. import std.stdio, std.datetime, std.parallelism, core.thread;
  2.  
  3. struct cArr {
  4.  
  5. int[] Array;
  6.  
  7. void calc() {
  8.  
  9. long result = 0;
  10. foreach (num; Array) {
  11. Thread.sleep(dur!("msecs")(50));
  12. result += num;
  13. }
  14.  
  15. writeln(result);
  16. }
  17. }
  18.  
  19. void performMultithreading() {
  20.  
  21. auto currTime = Clock.currTime();
  22.  
  23. int[][] arr = [
  24. [500, 500, 500],
  25. [500, 500, 500],
  26. [500, 500, 500],
  27. [500, 500, 500]
  28. ];
  29.  
  30. auto datas = [cArr(arr[0]), cArr(arr[1]), cArr(arr[2]), cArr(arr[3])];
  31.  
  32. foreach (data; parallel(datas))
  33. data.calc();
  34.  
  35. writeln("Duration with multithreading: ", Clock.currTime() - currTime);
  36. }
  37.  
  38.  
  39. void performSinglethreading() {
  40.  
  41. auto currTime = Clock.currTime();
  42.  
  43. int[][] arr = [
  44. [500, 500, 500],
  45. [500, 500, 500],
  46. [500, 500, 500],
  47. [500, 500, 500]
  48. ];
  49.  
  50. auto datas = [cArr(arr[0]), cArr(arr[1]), cArr(arr[2]), cArr(arr[3])];
  51.  
  52. foreach (data; datas)
  53. data.calc();
  54.  
  55. writeln("Duration with singlethreading: ", Clock.currTime() - currTime);
  56. }
  57.  
  58. void main() {
  59.  
  60. performSinglethreading();
  61. performMultithreading();
  62. }
Success #stdin #stdout 0s 4204KB
stdin
Standard input is empty
stdout
1500
1500
1500
1500
Duration with singlethreading: 600 ms, 690 μs, and 3 hnsecs
1500
1500
1500
1500
Duration with multithreading: 600 ms, 628 μs, and 6 hnsecs