diff options
| author | Andy Wingo <wingo@pobox.com> | 2017-06-16 14:41:37 +0200 |
|---|---|---|
| committer | Andy Wingo <wingo@pobox.com> | 2017-06-16 14:41:37 +0200 |
| commit | ca4469c6ceeae8be86a44fc5b3d51632406fe622 (patch) | |
| tree | 1b37e42a2f9963eb82849e1809438caac0f311d9 | |
| parent | Remove sieve printout (diff) | |
| download | guile-fibers-ca4469c6ceeae8be86a44fc5b3d51632406fe622.tar.gz | |
Add parallel ping-pong benchmark
| -rw-r--r-- | benchmarks/ping-pong.scm | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/benchmarks/ping-pong.scm b/benchmarks/ping-pong.scm new file mode 100644 index 0000000..995ecd7 --- /dev/null +++ b/benchmarks/ping-pong.scm @@ -0,0 +1,40 @@ +#!/usr/bin/env guile +# -*- scheme -*- +!# + +(use-modules (ice-9 match) + (fibers) + (fibers channels)) + +(define (run-ping-pong message-count) + (let ((ch (make-channel))) + (spawn-fiber (lambda () + (let lp () + (put-message ch (get-message ch)) + (lp))) + #:parallel? #t) + (let lp ((n 0)) + (when (< n message-count) + (put-message ch n) + (get-message ch) + (lp (1+ n)))))) + +(define (test pair-count message-count) + (let ((done (make-channel))) + (for-each (lambda (_) + (spawn-fiber (lambda () + (run-ping-pong message-count) + (put-message done 'done)) + #:parallel? #t)) + (iota pair-count)) + (for-each (lambda (_) (get-message done)) + (iota pair-count)))) + +(define (main args) + (match args + ((_ pair-count message-count) + (let ((pair-count (string->number pair-count)) + (message-count (string->number message-count))) + (run-fibers (lambda () (test pair-count message-count))))))) + +(when (batch-mode?) (main (program-arguments))) |
