test1.d 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. alias uint8 = ubyte;
  2. import std.stdio;
  3. //import std.parallelism : defaultPoolThreads;
  4. import std.concurrency : receive, receiveOnly, receiveTimeout, send, spawn, thisTid, Tid, ThreadScheduler, FiberScheduler;
  5. import core.time : Duration, dur;
  6. import core.thread : Thread;
  7. //void test1_worker(uint8 n){
  8. void test1_worker(int n){
  9. writeln("started worker = ", n);
  10. Thread.sleep(dur!"seconds"(120));
  11. writeln("stopped worker = ", n);
  12. }
  13. void test1_spawner(){
  14. //uint8 i = 10; // 10 = 1.8 Mb RAM // 255 = 2.9 Mb RAM // 1000 = 6.1 Mb RAM // 10_000 = 47.9 Mb RAM // 100_000 = 180.3 -> 434.4 Mb RAM ,, 161.8 -> 607.7 Mb RAM
  15. int i = 100_000; // freeze with 180.3 -> 434.4 Mb RAM .. (( 161.8 -> 607.7 Mb RAM
  16. //int i = 1_000;
  17. auto scheduler = new ThreadScheduler();
  18. //auto scheduler = new FiberScheduler;
  19. //scheduler.start({});
  20. while(i > 0){
  21. scheduler.spawn({
  22. writeln("thread ", thisTid(), " == i = ", i);
  23. //Thread.sleep(dur!"seconds"(3));
  24. Thread.sleep(dur!"seconds"(120));
  25. });
  26. i--;
  27. }
  28. /*
  29. //while(i > 0){ // 10 CPU' cores ?
  30. foreach(i2; 0..10){ // 10 CPU' cores ?
  31. //auto i2 = i;
  32. scheduler.spawn({
  33. foreach(j; 0..10){ // 10 threads per CPU core ?
  34. writeln("thread ", thisTid(), " == i, j = ", i2, " ", j);
  35. Thread.sleep(dur!"seconds"(3));
  36. //Thread.sleep(dur!"seconds"(120));
  37. }
  38. });
  39. //i--;
  40. }
  41. */
  42. /*
  43. while(i > 0){
  44. spawn(&test1_worker, i);
  45. i--;
  46. }
  47. */
  48. }
  49. /*
  50. // 10 threads (10 OS processes ?) - but with problem for 100_000 threads - but only on one CPU core (
  51. > make run
  52. ./vtest2
  53. started worker = 8
  54. started worker = 7
  55. started worker = 9
  56. started worker = 6
  57. started worker = 1
  58. started worker = 10
  59. started worker = 5
  60. started worker = 3
  61. started worker = 2
  62. started worker = 4
  63. stopped worker = 8
  64. stopped worker = 9
  65. stopped worker = 7
  66. stopped worker = 10
  67. stopped worker = 6
  68. stopped worker = 1
  69. stopped worker = 4
  70. stopped worker = 3
  71. stopped worker = 5
  72. stopped worker = 2
  73. hello here!
  74. */