2008-02-18 08:30:16 -05:00
|
|
|
USING: threads concurrency.messaging kernel
|
|
|
|
tools.time math sequences ;
|
2007-09-20 18:09:08 -04:00
|
|
|
IN: benchmark.ring
|
|
|
|
|
|
|
|
SYMBOL: done
|
|
|
|
|
|
|
|
: tunnel ( process -- process )
|
|
|
|
receive 2dup swap send done eq? [ tunnel ] unless ;
|
|
|
|
|
|
|
|
: create-ring ( processes -- target )
|
2008-02-21 02:25:08 -05:00
|
|
|
self swap [
|
|
|
|
dup [ tunnel ] curry "Tunnel" spawn nip
|
|
|
|
] times ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: send-messages ( messages target -- )
|
2015-06-29 19:43:15 -04:00
|
|
|
[ dup iota ] dip [ send ] curry each [ receive drop ] times ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: destroy-ring ( target -- )
|
|
|
|
done swap send [ done eq? ] receive-if drop ;
|
|
|
|
|
|
|
|
: ring-bench ( messages processes -- )
|
2015-06-29 19:43:15 -04:00
|
|
|
create-ring [ send-messages ] keep destroy-ring ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2012-07-19 20:35:47 -04:00
|
|
|
: ring-benchmark ( -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
1000 1000 ring-bench ;
|
|
|
|
|
2012-07-19 20:35:47 -04:00
|
|
|
MAIN: ring-benchmark
|