benchmark.sockets: fix race by using promises instead of super-dodgy random calls to yield
parent
dc4970e234
commit
d43802bea2
|
@ -1,4 +1,4 @@
|
||||||
! Copyright (C) 2008 Slava Pestov.
|
! Copyright (C) 2008, 2010 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors kernel math threads io io.sockets
|
USING: accessors kernel math threads io io.sockets
|
||||||
io.encodings.ascii io.streams.duplex debugger tools.time
|
io.encodings.ascii io.streams.duplex debugger tools.time
|
||||||
|
@ -7,13 +7,14 @@ namespaces arrays continuations destructors ;
|
||||||
IN: benchmark.sockets
|
IN: benchmark.sockets
|
||||||
|
|
||||||
SYMBOL: counter
|
SYMBOL: counter
|
||||||
SYMBOL: port-promise
|
SYMBOL: server-promise
|
||||||
SYMBOL: server
|
SYMBOL: server
|
||||||
|
SYMBOL: port
|
||||||
|
|
||||||
CONSTANT: number-of-requests 1000
|
CONSTANT: number-of-requests 1000
|
||||||
|
|
||||||
: server-addr ( -- addr )
|
: server-addr ( -- addr )
|
||||||
"127.0.0.1" port-promise get ?promise <inet4> ;
|
"127.0.0.1" port get <inet4> ;
|
||||||
|
|
||||||
: server-loop ( server -- )
|
: server-loop ( server -- )
|
||||||
dup accept drop [
|
dup accept drop [
|
||||||
|
@ -28,13 +29,8 @@ CONSTANT: number-of-requests 1000
|
||||||
] curry "Client handler" spawn drop server-loop ;
|
] curry "Client handler" spawn drop server-loop ;
|
||||||
|
|
||||||
: simple-server ( -- )
|
: simple-server ( -- )
|
||||||
[
|
[ server get [ server-loop ] with-disposal ] ignore-errors
|
||||||
"127.0.0.1" 0 <inet4> ascii <server>
|
t server-promise get fulfill ;
|
||||||
[ server set ]
|
|
||||||
[ addr>> port>> port-promise get fulfill ]
|
|
||||||
[ [ server-loop ] with-disposal ]
|
|
||||||
tri
|
|
||||||
] ignore-errors ;
|
|
||||||
|
|
||||||
: simple-client ( -- )
|
: simple-client ( -- )
|
||||||
[
|
[
|
||||||
|
@ -53,14 +49,17 @@ CONSTANT: number-of-requests 1000
|
||||||
|
|
||||||
: clients ( n -- )
|
: clients ( n -- )
|
||||||
dup pprint " clients: " write [
|
dup pprint " clients: " write [
|
||||||
<promise> port-promise set
|
<promise> server-promise set
|
||||||
dup <count-down> counter set
|
dup <count-down> counter set
|
||||||
|
"127.0.0.1" 0 <inet4> ascii <server>
|
||||||
|
[ server set ] [ addr>> port>> port set ] bi
|
||||||
|
|
||||||
[ simple-server ] "Simple server" spawn drop
|
[ simple-server ] "Simple server" spawn drop
|
||||||
yield yield
|
|
||||||
[ [ simple-client ] "Simple client" spawn drop ] times
|
[ [ simple-client ] "Simple client" spawn drop ] times
|
||||||
|
|
||||||
counter get await
|
counter get await
|
||||||
stop-server
|
stop-server
|
||||||
yield yield
|
server-promise get ?promise drop
|
||||||
] benchmark . flush ;
|
] benchmark . flush ;
|
||||||
|
|
||||||
: socket-benchmarks ( -- )
|
: socket-benchmarks ( -- )
|
||||||
|
|
Loading…
Reference in New Issue