On Fri, Aug 12, 2011 at 09:49:45AM +0600, Nick Knutov wrote:
I agree, forking is another way to do it, but as far as I know, it can lead to very high load. Also, dying process is a heavy operation, as far as I remember.
Simple benchmark with ab can prove that: ab2 -c 1 -n 500 http://127.0.0.1:5000/ ... Requests per second: 299.41 [#/sec] (mean) Time per request: 3.340 [ms] (mean) ... Adding fork() to a "/" route: exit unless(fork); waitpid( -1, WNOHANG ); ab2 -c 1 -n 500 http://127.0.0.1:5000/ ... Requests per second: 52.60 [#/sec] (mean) Time per request: 19.011 [ms] (mean) ... 6X time slower!
12.08.2011 0:27, David Precious пишет:
On Thursday 11 August 2011 18:17:47 David Precious wrote:
Another possible alternative would be to fork a new process that will do the stuff in the background, whilst the original process continues onwards to send the response back to the client.
For the time being, at least, this is probably the easiest option.
Something like:
hook after => sub { if (fork) { # parent - do nothing } else { # Child - sleep for a while sleep 50; exit; } };
With a quick test, that works as expected. (The exit is required, so that the child process doesn't then go on return control to Dancer.)
-- Vladimir Lettiev aka crux ✉ theCrux@gmail.com