| Index: example/runner-pool.dart
|
| diff --git a/example/runner-pool.dart b/example/runner-pool.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e81e496050ee2f88fba6a04e61f8b02d6900ab82
|
| --- /dev/null
|
| +++ b/example/runner-pool.dart
|
| @@ -0,0 +1,58 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library dart.pkg.isolate.sample.runners;
|
| +
|
| +import "package:isolate/loadbalancer.dart";
|
| +import "package:isolate/isolaterunner.dart";
|
| +import "dart:async" show Future, Completer;
|
| +
|
| +
|
| +void main() {
|
| + int N = 44;
|
| + var sw = new Stopwatch()..start();
|
| + // Compute fib up to 42 with 4 isolates.
|
| + parfib(N, 4).then((v1) {
|
| + var t1 = sw.elapsedMilliseconds;
|
| + sw.stop();
|
| + sw.reset();
|
| + print("fib#4(${N}) = ${v1[N]}, ms: $t1");
|
| + sw.start();
|
| + // Then compute fib up to 42 with 2 isolates.
|
| + parfib(N, 2).then((v2) {
|
| + var t2 = sw.elapsedMilliseconds;
|
| + sw.stop();
|
| + print("fib#2(${N}) = ${v2[N]}, ms: $t2");
|
| + });
|
| + });
|
| +}
|
| +
|
| +// Compute fibonnacci 1..limit
|
| +Future<List<int>> parfib(int limit, int parallelity) {
|
| + return LoadBalancer.create(parallelity, IsolateRunner.spawn).then(
|
| + (LoadBalancer pool) {
|
| + List<Future> fibs = new List(limit + 1);
|
| + // Schedule all calls with exact load value and the heaviest task
|
| + // assigned first.
|
| + schedule(a, b, i) {
|
| + if (i < limit) {
|
| + schedule(a + b, a, i + 1);
|
| + }
|
| + fibs[i] = pool.run(fib, i, load: a);
|
| + }
|
| + schedule(0, 1, 0);
|
| + // And wait for them all to complete.
|
| + return Future.wait(fibs).whenComplete(pool.close);
|
| + });
|
| +}
|
| +
|
| +int computeFib(n) {
|
| + int result = fib(n);
|
| + return result;
|
| +}
|
| +
|
| +int fib(n) {
|
| + if (n < 2) return n;
|
| + return fib(n - 1) + fib(n - 2);
|
| +}
|
|
|