diff options
| author | Andy Wingo <wingo@pobox.com> | 2017-06-18 18:20:13 +0200 |
|---|---|---|
| committer | Andy Wingo <wingo@pobox.com> | 2017-06-18 18:20:13 +0200 |
| commit | cc9b230417f161c2540f79ef1bef4cc7e31de916 (patch) | |
| tree | 2d2f75e8346e5fbe292977c16ff2ccd57e150fe4 /benchmarks/local-ping-pong.scm | |
| parent | Fix diagonal benchmark (diff) | |
| download | guile-fibers-cc9b230417f161c2540f79ef1bef4cc7e31de916.tar.gz | |
Add local ping-pong benchmark
Diffstat (limited to 'benchmarks/local-ping-pong.scm')
| -rw-r--r-- | benchmarks/local-ping-pong.scm | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/benchmarks/local-ping-pong.scm b/benchmarks/local-ping-pong.scm new file mode 100644 index 0000000..400421b --- /dev/null +++ b/benchmarks/local-ping-pong.scm @@ -0,0 +1,39 @@ +#!/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)))) + (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))) |
