Get/set benchmark for pure-perl memcached implementation using several backends.
Initial results:
IO::Async::Loop::Poll : 1897.96 cycles/s, 2.635 elapsed
POE : 2169.03 cycles/s, 2.306 elapsed
IO::Async::Loop::Select: 2446.31 cycles/s, 2.044 elapsed
IO::Async::Loop::Epoll : 2684.97 cycles/s, 1.863 elapsed
Socket : 7275.04 cycles/s, 0.687 elapsed
connect
Connect to the socket and enable nonblocking mode.
write
Write data to socket immediately, without checking whether it's able to receive. We'll call on_flush as soon as the write returns.
close
Close the socket immediately.
connect
Connects to memcached and hits the on_connected callback if available.
write
Pass data straight over to IO::Async::Stream which already uses the '$data, on_flush => coderef' API.
write
Attempt to write data to the socket using the ->put method as per cookbook examples.
run
Main entry point - will attempt to connect, expecting the {connect} handler to call ->iterate when it's ready.
iterate
Queue the SET + GET for the next pending value, or hit cycle_complete if we're done.
cycle_complete
Mark this benchmark as finished, reporting on stats.
run_loop
Execute the main loop.
next_value
Returns next value if we have one.