parallel

Handyman via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Nov 5 12:30:05 PST 2015


import std.stdio;
import core.thread;
import std.datetime;          // for stopwatch
import std.parallelism;

void say(string s) {          // write and flush
    writeln(s);
    stdout.flush();
}

struct Dish {
    string name;
    void prepare() {
       say("Start with the " ~ name ~ ".");
       Thread.sleep(1.seconds); // kunstmatig tijd verbruiken
       say("Finished the " ~ name ~ ".");
    }
}

void main() {
    auto dishes = [ Dish("soup"), Dish("sauce"), Dish("fries"), 
Dish("fish"), Dish("ice") ];
    auto sw = StopWatch(AutoStart.yes);
    foreach (dish; parallel(dishes, 1)) dish.prepare();
    sw.stop;
    writefln("Diner is ready.  Cooking took %.3f seconds.", 
cast(float) sw.peek.msecs / 1000);
}

gives:

Start with the soup.
Start with the sauce.
Start with the fries.
Start with the fish.
Finished the sauce.
Finished the fries.
Start with the ice.
Finished the soup.
Finished the fish.
Finished the ice.
Diner is ready.  Cooking took 1.999 seconds.

Seems that 4 cores go all out on first 4 dishes, then 1 core 
deals with the last dish.  With 4 cores I expect diner is ready 
after 5/4 = 1.25 secs though.  What did I do wrong?


More information about the Digitalmars-d-learn mailing list