digitalmars.D.learn - Why does scopedTask increase memory consumption?
- Andrej Mitrovic (29/29) Nov 21 2011 import core.thread;
import core.thread; import std.parallelism; import std.stdio; enum loops = 100; void runTask() { static void test() { } auto newTask = scopedTask(&test); newTask.executeInNewThread(); newTask.yieldForce(); } void main() { foreach (_; 0 .. loops) runTask(); writeln("done"); Thread.sleep(dur!"seconds"(4)); } Running this consumes 8.024 KB on a win32 quad-core machine. If I set loops to 100_000, it consumes 9.040 KB. I know each thread has its own storage, but I'm invoking only one thread at a time, so after that thread finishes I would assume the thread would clean up after itself and release all memory. In another app using scopedTask keeps eating more and more memory, even though calling the same target function serially doesn't increase memory consumption. I admit I'm very new to concurrency so I don't know whether this is normal or not. I know each thread has its own TLS but afaik when a thread dies it should release those resources.
Nov 21 2011