1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // https://dlang.org/phobos/std_parallelism.html
- alias uint8 = ubyte;
- alias uint64 = ulong;
- import std.stdio;
- import std.concurrency : spawn;
- import std.parallelism : parallel, defaultPoolThreads;
- import core.time : Duration, dur;
- import core.thread : Thread;
- uint64 fact(uint64 n){
- return fact(n, 1);
- }
- uint64 fact(uint64 n, uint64 a){
- if(n == 0){
- return a;
- }else{
- return fact(n - 1, n * a);
- }
- }
- //void test4_worker(uint8 n){
- void test4_worker(int n){
- writeln("started worker = ", n);
-
- while(true){
- //Thread.sleep(dur!"seconds"(120));
-
- //Thread.sleep(dur!"seconds"(3));
-
- auto v20 = fact(20);
- //writeln("worker = ", n, " fact 20 = ", v20); // this is sync lock ((
- }
-
- Thread.sleep(dur!"seconds"(3));
-
- writeln("stopped worker = ", n);
- }
- void test4_spawner(){
- //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
- //int i = 100_000; // fails
- //int i = 30_000;
- //int i = 35_000; // fails
-
- /*
- while(i > 0){
- spawn(&test1_worker, i);
-
- i--;
- }
- */
-
- writeln("defaultPoolThreads = ", defaultPoolThreads()); // 19
- defaultPoolThreads(5);
- writeln("defaultPoolThreads = ", defaultPoolThreads()); // 5
-
- //int[] ints = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
- int[] ints = [1, 2, 3, 4, 5];
-
- foreach(i, ref num; parallel(ints)){
- test4_worker(num);
- }
-
- }
- /*
- > make run
- ./vtest2
- // 21 threads for 10 elems
- // 21 threads for 5 elems too
- // 7 threadf for 5 elems
- // writeln locking
- */
|