|
@@ -3,9 +3,9 @@ alias uint8 = ubyte;
|
|
|
|
|
|
import std.stdio;
|
|
|
//import std.parallelism : defaultPoolThreads;
|
|
|
-import std.concurrency : spawn;
|
|
|
+import std.concurrency : receive, receiveOnly, receiveTimeout, send, spawn, thisTid, Tid, ThreadScheduler, FiberScheduler;
|
|
|
import core.time : Duration, dur;
|
|
|
-import core.thread;
|
|
|
+import core.thread : Thread;
|
|
|
|
|
|
|
|
|
//void test1_worker(uint8 n){
|
|
@@ -19,14 +19,48 @@ void test1_worker(int n){
|
|
|
|
|
|
|
|
|
void test1_spawner(){
|
|
|
- uint8 i = 10; // 10 = 1.7 Mb RAM // 255 = 2.9 Mb RAM // 1000 = 6.6 Mb RAM // 10_000 = 55.1 Mb RAM // 100_000 = 180.3 -> 434.4 Mb RAM
|
|
|
- //int i = 100_000; // freeze with 180.3 -> 434.4 Mb RAM .. ((
|
|
|
+ //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; // freeze with 180.3 -> 434.4 Mb RAM .. (( 161.8 -> 607.7 Mb RAM
|
|
|
+ //int i = 1_000;
|
|
|
|
|
|
+ auto scheduler = new ThreadScheduler();
|
|
|
+ //auto scheduler = new FiberScheduler;
|
|
|
+
|
|
|
+ //scheduler.start({});
|
|
|
+
|
|
|
+ while(i > 0){
|
|
|
+ scheduler.spawn({
|
|
|
+ writeln("thread ", thisTid(), " == i = ", i);
|
|
|
+ //Thread.sleep(dur!"seconds"(3));
|
|
|
+ Thread.sleep(dur!"seconds"(120));
|
|
|
+ });
|
|
|
+ i--;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ //while(i > 0){ // 10 CPU' cores ?
|
|
|
+ foreach(i2; 0..10){ // 10 CPU' cores ?
|
|
|
+ //auto i2 = i;
|
|
|
+ scheduler.spawn({
|
|
|
+ foreach(j; 0..10){ // 10 threads per CPU core ?
|
|
|
+ writeln("thread ", thisTid(), " == i, j = ", i2, " ", j);
|
|
|
+ Thread.sleep(dur!"seconds"(3));
|
|
|
+ //Thread.sleep(dur!"seconds"(120));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ //i--;
|
|
|
+ }
|
|
|
+ */
|
|
|
+
|
|
|
+ /*
|
|
|
while(i > 0){
|
|
|
spawn(&test1_worker, i);
|
|
|
|
|
|
i--;
|
|
|
}
|
|
|
+ */
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|