diff options
| author | Brian Anderson <banderson@mozilla.com> | 2011-12-17 16:45:13 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-12-20 20:15:09 -0800 |
| commit | aeadc6269ef76f4425a49d892ceac7ea311ef5c1 (patch) | |
| tree | e62356f817552b6430f43b6c72964325791418d1 /src/test/bench | |
| parent | 128621be97d425a1d19e6640c8aee4fb6fca430b (diff) | |
| download | rust-aeadc6269ef76f4425a49d892ceac7ea311ef5c1.tar.gz rust-aeadc6269ef76f4425a49d892ceac7ea311ef5c1.zip | |
wip
Diffstat (limited to 'src/test/bench')
| -rw-r--r-- | src/test/bench/task-perf-one-million.rs | 60 |
1 files changed, 60 insertions, 0 deletions
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<msg>); + start; + done(int); +} + +fn calc(&&args: (int, comm::chan<msg>)) { + 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 |
