From aeadc6269ef76f4425a49d892ceac7ea311ef5c1 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 17 Dec 2011 16:45:13 -0800 Subject: wip --- src/test/bench/task-perf-one-million.rs | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/test/bench/task-perf-one-million.rs (limited to 'src/test/bench') diff --git a/src/test/bench/task-perf-one-million.rs b/src/test/bench/task-perf-one-million.rs new file mode 100644 index 00000000000..8430351b7e9 --- /dev/null +++ b/src/test/bench/task-perf-one-million.rs @@ -0,0 +1,60 @@ +// xfail-test FIXME: Can't run under valgrind - too much RAM +// FIXME: This doesn't spawn close to a million tasks yet + +tag msg { + ready(comm::chan); + start; + done(int); +} + +fn calc(&&args: (int, comm::chan)) { + let (depth, parent_ch) = args; + let port = comm::port(); + let children = depth > 0 ? 20u : 0u; + let child_chs = []; + let sum = 0; + + repeat (children) {|| + task::spawn((depth - 1, comm::chan(port)), calc); + } + + repeat (children) {|| + alt comm::recv(port) { + ready(child_ch) { + child_chs += [child_ch]; + } + } + } + + comm::send(parent_ch, ready(comm::chan(port))); + + alt comm::recv(port) { + start. { + vec::iter (child_chs) { |child_ch| + comm::send(child_ch, start); + } + } + } + + repeat (children) {|| + alt comm::recv(port) { + done(child_sum) { sum += child_sum; } + } + } + + comm::send(parent_ch, done(sum + 1)); +} + +fn main() { + let port = comm::port(); + task::spawn((3, comm::chan(port)), calc); + alt comm::recv(port) { + ready(chan) { + comm::send(chan, start); + } + } + let sum = alt comm::recv(port) { + done(sum) { sum } + }; + log #fmt("How many tasks? That's right, %d tasks.", sum); +} \ No newline at end of file -- cgit 1.4.1-3-g733a5