ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-Fork/Fork.pm
Revision: 1.53
Committed: Fri Apr 26 15:44:44 2013 UTC (11 years ago) by root
Branch: MAIN
Changes since 1.52: +74 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.4 AnyEvent::Fork - everything you wanted to use fork() for, but couldn't
4 root 1.1
5     =head1 SYNOPSIS
6    
7 root 1.4 use AnyEvent::Fork;
8 root 1.1
9 root 1.24 AnyEvent::Fork
10     ->new
11     ->require ("MyModule")
12     ->run ("MyModule::server", my $cv = AE::cv);
13    
14     my $fh = $cv->recv;
15    
16     =head1 DESCRIPTION
17    
18     This module allows you to create new processes, without actually forking
19     them from your current process (avoiding the problems of forking), but
20     preserving most of the advantages of fork.
21    
22     It can be used to create new worker processes or new independent
23     subprocesses for short- and long-running jobs, process pools (e.g. for use
24     in pre-forked servers) but also to spawn new external processes (such as
25     CGI scripts from a web server), which can be faster (and more well behaved)
26     than using fork+exec in big processes.
27    
28     Special care has been taken to make this module useful from other modules,
29     while still supporting specialised environments such as L<App::Staticperl>
30     or L<PAR::Packer>.
31    
32 root 1.39 =head2 WHAT THIS MODULE IS NOT
33 root 1.24
34     This module only creates processes and lets you pass file handles and
35     strings to it, and run perl code. It does not implement any kind of RPC -
36     there is no back channel from the process back to you, and there is no RPC
37     or message passing going on.
38    
39 root 1.43 If you need some form of RPC, you could use the L<AnyEvent::Fork::RPC>
40     companion module, which adds simple RPC/job queueing to a process created
41     by this module.
42    
43 root 1.51 And if you need some automatic process pool management on top of
44     L<AnyEvent::Fork::RPC>, you can look at the L<AnyEvent::Fork::Pool>
45     companion module.
46    
47     Or you can implement it yourself in whatever way you like: use some
48 root 1.43 message-passing module such as L<AnyEvent::MP>, some pipe such as
49     L<AnyEvent::ZeroMQ>, use L<AnyEvent::Handle> on both sides to send
50     e.g. JSON or Storable messages, and so on.
51 root 1.24
52 root 1.39 =head2 COMPARISON TO OTHER MODULES
53    
54     There is an abundance of modules on CPAN that do "something fork", such as
55     L<Parallel::ForkManager>, L<AnyEvent::ForkManager>, L<AnyEvent::Worker>
56     or L<AnyEvent::Subprocess>. There are modules that implement their own
57     process management, such as L<AnyEvent::DBI>.
58    
59     The problems that all these modules try to solve are real, however, none
60     of them (from what I have seen) tackle the very real problems of unwanted
61     memory sharing, efficiency, not being able to use event processing or
62     similar modules in the processes they create.
63    
64     This module doesn't try to replace any of them - instead it tries to solve
65     the problem of creating processes with a minimum of fuss and overhead (and
66     also luxury). Ideally, most of these would use AnyEvent::Fork internally,
67     except they were written before AnyEvent:Fork was available, so obviously
68     had to roll their own.
69    
70     =head2 PROBLEM STATEMENT
71 root 1.25
72     There are two traditional ways to implement parallel processing on UNIX
73     like operating systems - fork and process, and fork+exec and process. They
74     have different advantages and disadvantages that I describe below,
75     together with how this module tries to mitigate the disadvantages.
76    
77     =over 4
78    
79     =item Forking from a big process can be very slow.
80    
81     A 5GB process needs 0.05s to fork on my 3.6GHz amd64 GNU/Linux box. This
82     overhead is often shared with exec (because you have to fork first), but
83     in some circumstances (e.g. when vfork is used), fork+exec can be much
84     faster.
85    
86     This module can help here by telling a small(er) helper process to fork,
87     which is faster then forking the main process, and also uses vfork where
88     possible. This gives the speed of vfork, with the flexibility of fork.
89    
90     =item Forking usually creates a copy-on-write copy of the parent
91     process.
92    
93     For example, modules or data files that are loaded will not use additional
94     memory after a fork. When exec'ing a new process, modules and data files
95     might need to be loaded again, at extra CPU and memory cost. But when
96     forking, literally all data structures are copied - if the program frees
97     them and replaces them by new data, the child processes will retain the
98     old version even if it isn't used, which can suddenly and unexpectedly
99     increase memory usage when freeing memory.
100    
101     The trade-off is between more sharing with fork (which can be good or
102     bad), and no sharing with exec.
103    
104     This module allows the main program to do a controlled fork, and allows
105     modules to exec processes safely at any time. When creating a custom
106     process pool you can take advantage of data sharing via fork without
107     risking to share large dynamic data structures that will blow up child
108     memory usage.
109    
110     In other words, this module puts you into control over what is being
111     shared and what isn't, at all times.
112    
113     =item Exec'ing a new perl process might be difficult.
114    
115     For example, it is not easy to find the correct path to the perl
116     interpreter - C<$^X> might not be a perl interpreter at all.
117    
118     This module tries hard to identify the correct path to the perl
119     interpreter. With a cooperative main program, exec'ing the interpreter
120     might not even be necessary, but even without help from the main program,
121     it will still work when used from a module.
122    
123     =item Exec'ing a new perl process might be slow, as all necessary modules
124     have to be loaded from disk again, with no guarantees of success.
125    
126     Long running processes might run into problems when perl is upgraded
127     and modules are no longer loadable because they refer to a different
128     perl version, or parts of a distribution are newer than the ones already
129     loaded.
130    
131     This module supports creating pre-initialised perl processes to be used as
132     a template for new processes.
133    
134     =item Forking might be impossible when a program is running.
135    
136     For example, POSIX makes it almost impossible to fork from a
137     multi-threaded program while doing anything useful in the child - in
138     fact, if your perl program uses POSIX threads (even indirectly via
139     e.g. L<IO::AIO> or L<threads>), you cannot call fork on the perl level
140     anymore without risking corruption issues on a number of operating
141     systems.
142    
143     This module can safely fork helper processes at any time, by calling
144     fork+exec in C, in a POSIX-compatible way (via L<Proc::FastSpawn>).
145    
146     =item Parallel processing with fork might be inconvenient or difficult
147     to implement. Modules might not work in both parent and child.
148    
149     For example, when a program uses an event loop and creates watchers it
150     becomes very hard to use the event loop from a child program, as the
151     watchers already exist but are only meaningful in the parent. Worse, a
152     module might want to use such a module, not knowing whether another module
153     or the main program also does, leading to problems.
154    
155 root 1.26 Apart from event loops, graphical toolkits also commonly fall into the
156     "unsafe module" category, or just about anything that communicates with
157     the external world, such as network libraries and file I/O modules, which
158     usually don't like being copied and then allowed to continue in two
159     processes.
160    
161 root 1.25 With this module only the main program is allowed to create new processes
162     by forking (because only the main program can know when it is still safe
163     to do so) - all other processes are created via fork+exec, which makes it
164     possible to use modules such as event loops or window interfaces safely.
165    
166     =back
167    
168 root 1.24 =head1 EXAMPLES
169    
170     =head2 Create a single new process, tell it to run your worker function.
171 root 1.9
172     AnyEvent::Fork
173     ->new
174     ->require ("MyModule")
175     ->run ("MyModule::worker, sub {
176     my ($master_filehandle) = @_;
177    
178     # now $master_filehandle is connected to the
179     # $slave_filehandle in the new process.
180     });
181    
182 root 1.32 C<MyModule> might look like this:
183 root 1.30
184 root 1.31 package MyModule;
185    
186     sub worker {
187 root 1.9 my ($slave_filehandle) = @_;
188    
189     # now $slave_filehandle is connected to the $master_filehandle
190     # in the original prorcess. have fun!
191     }
192    
193 root 1.24 =head2 Create a pool of server processes all accepting on the same socket.
194 root 1.9
195     # create listener socket
196     my $listener = ...;
197    
198     # create a pool template, initialise it and give it the socket
199     my $pool = AnyEvent::Fork
200     ->new
201     ->require ("Some::Stuff", "My::Server")
202     ->send_fh ($listener);
203    
204     # now create 10 identical workers
205     for my $id (1..10) {
206     $pool
207     ->fork
208     ->send_arg ($id)
209     ->run ("My::Server::run");
210     }
211    
212     # now do other things - maybe use the filehandle provided by run
213     # to wait for the processes to die. or whatever.
214    
215 root 1.32 C<My::Server> might look like this:
216 root 1.31
217     package My::Server;
218 root 1.30
219 root 1.31 sub run {
220 root 1.9 my ($slave, $listener, $id) = @_;
221    
222     close $slave; # we do not use the socket, so close it to save resources
223    
224     # we could go ballistic and use e.g. AnyEvent here, or IO::AIO,
225     # or anything we usually couldn't do in a process forked normally.
226     while (my $socket = $listener->accept) {
227     # do sth. with new socket
228     }
229     }
230    
231 root 1.24 =head2 use AnyEvent::Fork as a faster fork+exec
232 root 1.23
233 root 1.44 This runs C</bin/echo hi>, with standard output redirected to F</tmp/log>
234 root 1.32 and standard error redirected to the communications socket. It is usually
235     faster than fork+exec, but still lets you prepare the environment.
236 root 1.23
237     open my $output, ">/tmp/log" or die "$!";
238    
239     AnyEvent::Fork
240     ->new
241     ->eval ('
242 root 1.40 # compile a helper function for later use
243 root 1.23 sub run {
244     my ($fh, $output, @cmd) = @_;
245    
246     # perl will clear close-on-exec on STDOUT/STDERR
247     open STDOUT, ">&", $output or die;
248     open STDERR, ">&", $fh or die;
249    
250     exec @cmd;
251     }
252     ')
253     ->send_fh ($output)
254     ->send_arg ("/bin/echo", "hi")
255     ->run ("run", my $cv = AE::cv);
256    
257     my $stderr = $cv->recv;
258    
259 root 1.51 =head2 For stingy users: put the worker code into a C<DATA> section.
260    
261     When you want to be stingy with files, you cna put your code into the
262     C<DATA> section of your module (or program):
263    
264     use AnyEvent::Fork;
265    
266     AnyEvent::Fork
267     ->new
268     ->eval (do { local $/; <DATA> })
269     ->run ("doit", sub { ... });
270    
271     __DATA__
272    
273     sub doit {
274     ... do something!
275     }
276    
277     =head2 For stingy standalone programs: do not rely on external files at
278     all.
279    
280     For single-file scripts it can be inconvenient to rely on external
281     files - even when using < C<DATA> section, you still need to C<exec>
282     an external perl interpreter, which might not be available when using
283     L<App::Staticperl>, L<Urlader> or L<PAR::Packer> for example.
284    
285     Two modules help here - L<AnyEvent::Fork::Early> forks a template process
286     for all further calls to C<new_exec>, and L<AnyEvent::Fork::Template>
287     forks the main program as a template process.
288    
289     Here is how your main program should look like:
290    
291     #! perl
292    
293     # optional, as the very first thing.
294     # in case modules want to create their own processes.
295     use AnyEvent::Fork::Early;
296    
297     # next, load all modules you need in your template process
298     use Example::My::Module
299     use Example::Whatever;
300    
301     # next, put your run function definition and anything else you
302     # need, but do not use code outside of BEGIN blocks.
303     sub worker_run {
304     my ($fh, @args) = @_;
305     ...
306     }
307    
308     # now preserve everything so far as AnyEvent::Fork object
309     # in §TEMPLATE.
310     use AnyEvent::Fork::Template;
311    
312     # do not put code outside of BEGIN blocks until here
313    
314     # now use the $TEMPLATE process in any way you like
315    
316     # for example: create 10 worker processes
317     my @worker;
318     my $cv = AE::cv;
319     for (1..10) {
320     $cv->begin;
321     $TEMPLATE->fork->send_arg ($_)->run ("worker_run", sub {
322     push @worker, shift;
323     $cv->end;
324     });
325     }
326     $cv->recv;
327    
328 root 1.52 =head1 CONCEPTS
329 root 1.3
330     This module can create new processes either by executing a new perl
331     process, or by forking from an existing "template" process.
332    
333 root 1.45 All these processes are called "child processes" (whether they are direct
334     children or not), while the process that manages them is called the
335     "parent process".
336    
337 root 1.3 Each such process comes with its own file handle that can be used to
338     communicate with it (it's actually a socket - one end in the new process,
339     one end in the main process), and among the things you can do in it are
340     load modules, fork new processes, send file handles to it, and execute
341     functions.
342    
343     There are multiple ways to create additional processes to execute some
344     jobs:
345    
346     =over 4
347    
348     =item fork a new process from the "default" template process, load code,
349     run it
350    
351     This module has a "default" template process which it executes when it is
352     needed the first time. Forking from this process shares the memory used
353     for the perl interpreter with the new process, but loading modules takes
354     time, and the memory is not shared with anything else.
355    
356     This is ideal for when you only need one extra process of a kind, with the
357 root 1.17 option of starting and stopping it on demand.
358 root 1.3
359 root 1.9 Example:
360    
361     AnyEvent::Fork
362     ->new
363     ->require ("Some::Module")
364     ->run ("Some::Module::run", sub {
365     my ($fork_fh) = @_;
366     });
367    
368 root 1.3 =item fork a new template process, load code, then fork processes off of
369     it and run the code
370    
371     When you need to have a bunch of processes that all execute the same (or
372     very similar) tasks, then a good way is to create a new template process
373     for them, loading all the modules you need, and then create your worker
374     processes from this new template process.
375    
376     This way, all code (and data structures) that can be shared (e.g. the
377     modules you loaded) is shared between the processes, and each new process
378     consumes relatively little memory of its own.
379    
380     The disadvantage of this approach is that you need to create a template
381     process for the sole purpose of forking new processes from it, but if you
382 root 1.17 only need a fixed number of processes you can create them, and then destroy
383 root 1.3 the template process.
384    
385 root 1.9 Example:
386    
387     my $template = AnyEvent::Fork->new->require ("Some::Module");
388    
389     for (1..10) {
390     $template->fork->run ("Some::Module::run", sub {
391     my ($fork_fh) = @_;
392     });
393     }
394    
395     # at this point, you can keep $template around to fork new processes
396     # later, or you can destroy it, which causes it to vanish.
397    
398 root 1.3 =item execute a new perl interpreter, load some code, run it
399    
400     This is relatively slow, and doesn't allow you to share memory between
401     multiple processes.
402    
403     The only advantage is that you don't have to have a template process
404     hanging around all the time to fork off some new processes, which might be
405     an advantage when there are long time spans where no extra processes are
406     needed.
407    
408 root 1.9 Example:
409    
410     AnyEvent::Fork
411     ->new_exec
412     ->require ("Some::Module")
413     ->run ("Some::Module::run", sub {
414     my ($fork_fh) = @_;
415     });
416    
417 root 1.3 =back
418    
419 root 1.27 =head1 THE C<AnyEvent::Fork> CLASS
420    
421     This module exports nothing, and only implements a single class -
422     C<AnyEvent::Fork>.
423    
424 root 1.28 There are two class constructors that both create new processes - C<new>
425     and C<new_exec>. The C<fork> method creates a new process by forking an
426 root 1.27 existing one and could be considered a third constructor.
427    
428     Most of the remaining methods deal with preparing the new process, by
429     loading code, evaluating code and sending data to the new process. They
430     usually return the process object, so you can chain method calls.
431    
432     If a process object is destroyed before calling its C<run> method, then
433     the process simply exits. After C<run> is called, all responsibility is
434     passed to the specified function.
435 root 1.3
436 root 1.29 As long as there is any outstanding work to be done, process objects
437     resist being destroyed, so there is no reason to store them unless you
438     need them later - configure and forget works just fine.
439    
440 root 1.1 =over 4
441    
442     =cut
443    
444 root 1.4 package AnyEvent::Fork;
445 root 1.1
446     use common::sense;
447    
448 root 1.18 use Errno ();
449 root 1.1
450     use AnyEvent;
451     use AnyEvent::Util ();
452    
453 root 1.15 use IO::FDPass;
454    
455 root 1.51 our $VERSION = '1.0';
456 root 1.12
457 root 1.5 # the early fork template process
458     our $EARLY;
459    
460 root 1.4 # the empty template process
461     our $TEMPLATE;
462    
463 root 1.42 sub QUEUE() { 0 }
464     sub FH() { 1 }
465     sub WW() { 2 }
466     sub PID() { 3 }
467     sub CB() { 4 }
468    
469     sub _new {
470     my ($self, $fh, $pid) = @_;
471    
472     AnyEvent::Util::fh_nonblocking $fh, 1;
473    
474     $self = bless [
475     [], # write queue - strings or fd's
476     $fh,
477     undef, # AE watcher
478     $pid,
479     ], $self;
480    
481     $self
482     }
483    
484 root 1.4 sub _cmd {
485     my $self = shift;
486    
487 root 1.18 # ideally, we would want to use "a (w/a)*" as format string, but perl
488     # versions from at least 5.8.9 to 5.16.3 are all buggy and can't unpack
489     # it.
490 root 1.42 push @{ $self->[QUEUE] }, pack "a L/a*", $_[0], $_[1];
491 root 1.4
492 root 1.42 $self->[WW] ||= AE::io $self->[FH], 1, sub {
493 root 1.19 do {
494     # send the next "thing" in the queue - either a reference to an fh,
495     # or a plain string.
496    
497 root 1.42 if (ref $self->[QUEUE][0]) {
498 root 1.19 # send fh
499 root 1.42 unless (IO::FDPass::send fileno $self->[FH], fileno ${ $self->[QUEUE][0] }) {
500 root 1.19 return if $! == Errno::EAGAIN || $! == Errno::EWOULDBLOCK;
501 root 1.42 undef $self->[WW];
502 root 1.19 die "AnyEvent::Fork: file descriptor send failure: $!";
503 root 1.18 }
504 root 1.4
505 root 1.42 shift @{ $self->[QUEUE] };
506 root 1.18
507 root 1.19 } else {
508     # send string
509 root 1.42 my $len = syswrite $self->[FH], $self->[QUEUE][0];
510 root 1.19
511     unless ($len) {
512     return if $! == Errno::EAGAIN || $! == Errno::EWOULDBLOCK;
513 root 1.50 undef $self->[WW];
514 root 1.19 die "AnyEvent::Fork: command write failure: $!";
515     }
516 root 1.18
517 root 1.42 substr $self->[QUEUE][0], 0, $len, "";
518     shift @{ $self->[QUEUE] } unless length $self->[QUEUE][0];
519 root 1.19 }
520 root 1.42 } while @{ $self->[QUEUE] };
521 root 1.19
522     # everything written
523 root 1.42 undef $self->[WW];
524 root 1.19
525     # invoke run callback, if any
526 root 1.48 if ($self->[CB]) {
527     $self->[CB]->($self->[FH]);
528     @$self = ();
529     }
530 root 1.19 };
531 root 1.14
532     () # make sure we don't leak the watcher
533 root 1.4 }
534 root 1.1
535 root 1.6 # fork template from current process, used by AnyEvent::Fork::Early/Template
536     sub _new_fork {
537     my ($fh, $slave) = AnyEvent::Util::portable_socketpair;
538 root 1.7 my $parent = $$;
539    
540 root 1.6 my $pid = fork;
541    
542     if ($pid eq 0) {
543     require AnyEvent::Fork::Serve;
544 root 1.7 $AnyEvent::Fork::Serve::OWNER = $parent;
545 root 1.6 close $fh;
546 root 1.7 $0 = "$_[1] of $parent";
547 root 1.6 AnyEvent::Fork::Serve::serve ($slave);
548 root 1.15 exit 0;
549 root 1.6 } elsif (!$pid) {
550     die "AnyEvent::Fork::Early/Template: unable to fork template process: $!";
551     }
552    
553 root 1.19 AnyEvent::Fork->_new ($fh, $pid)
554 root 1.6 }
555    
556 root 1.4 =item my $proc = new AnyEvent::Fork
557 root 1.1
558 root 1.4 Create a new "empty" perl interpreter process and returns its process
559     object for further manipulation.
560 root 1.1
561 root 1.4 The new process is forked from a template process that is kept around
562     for this purpose. When it doesn't exist yet, it is created by a call to
563 root 1.29 C<new_exec> first and then stays around for future calls.
564 root 1.9
565 root 1.4 =cut
566    
567     sub new {
568     my $class = shift;
569 root 1.1
570 root 1.4 $TEMPLATE ||= $class->new_exec;
571     $TEMPLATE->fork
572 root 1.1 }
573    
574 root 1.4 =item $new_proc = $proc->fork
575    
576     Forks C<$proc>, creating a new process, and returns the process object
577     of the new process.
578    
579     If any of the C<send_> functions have been called before fork, then they
580     will be cloned in the child. For example, in a pre-forked server, you
581     might C<send_fh> the listening socket into the template process, and then
582     keep calling C<fork> and C<run>.
583    
584     =cut
585    
586     sub fork {
587     my ($self) = @_;
588 root 1.1
589     my ($fh, $slave) = AnyEvent::Util::portable_socketpair;
590 root 1.4
591     $self->send_fh ($slave);
592     $self->_cmd ("f");
593    
594     AnyEvent::Fork->_new ($fh)
595     }
596    
597     =item my $proc = new_exec AnyEvent::Fork
598    
599     Create a new "empty" perl interpreter process and returns its process
600     object for further manipulation.
601    
602     Unlike the C<new> method, this method I<always> spawns a new perl process
603     (except in some cases, see L<AnyEvent::Fork::Early> for details). This
604     reduces the amount of memory sharing that is possible, and is also slower.
605    
606     You should use C<new> whenever possible, except when having a template
607     process around is unacceptable.
608    
609 root 1.17 The path to the perl interpreter is divined using various methods - first
610 root 1.4 C<$^X> is investigated to see if the path ends with something that sounds
611     as if it were the perl interpreter. Failing this, the module falls back to
612     using C<$Config::Config{perlpath}>.
613    
614     =cut
615    
616     sub new_exec {
617     my ($self) = @_;
618    
619 root 1.5 return $EARLY->fork
620     if $EARLY;
621    
622 root 1.4 # first find path of perl
623     my $perl = $;
624    
625     # first we try $^X, but the path must be absolute (always on win32), and end in sth.
626     # that looks like perl. this obviously only works for posix and win32
627     unless (
628 root 1.15 ($^O eq "MSWin32" || $perl =~ m%^/%)
629 root 1.4 && $perl =~ m%[/\\]perl(?:[0-9]+(\.[0-9]+)+)?(\.exe)?$%i
630     ) {
631     # if it doesn't look perlish enough, try Config
632     require Config;
633     $perl = $Config::Config{perlpath};
634     $perl =~ s/(?:\Q$Config::Config{_exe}\E)?$/$Config::Config{_exe}/;
635     }
636    
637     require Proc::FastSpawn;
638    
639     my ($fh, $slave) = AnyEvent::Util::portable_socketpair;
640     Proc::FastSpawn::fd_inherit (fileno $slave);
641    
642 root 1.10 # new fh's should always be set cloexec (due to $^F),
643     # but hey, not on win32, so we always clear the inherit flag.
644     Proc::FastSpawn::fd_inherit (fileno $fh, 0);
645    
646 root 1.4 # quick. also doesn't work in win32. of course. what did you expect
647     #local $ENV{PERL5LIB} = join ":", grep !ref, @INC;
648 root 1.1 my %env = %ENV;
649 root 1.15 $env{PERL5LIB} = join +($^O eq "MSWin32" ? ";" : ":"), grep !ref, @INC;
650 root 1.1
651 root 1.19 my $pid = Proc::FastSpawn::spawn (
652 root 1.4 $perl,
653 root 1.7 ["perl", "-MAnyEvent::Fork::Serve", "-e", "AnyEvent::Fork::Serve::me", fileno $slave, $$],
654 root 1.4 [map "$_=$env{$_}", keys %env],
655     ) or die "unable to spawn AnyEvent::Fork server: $!";
656    
657 root 1.19 $self->_new ($fh, $pid)
658 root 1.4 }
659    
660 root 1.20 =item $pid = $proc->pid
661    
662     Returns the process id of the process I<iff it is a direct child of the
663 root 1.33 process running AnyEvent::Fork>, and C<undef> otherwise.
664 root 1.20
665     Normally, only processes created via C<< AnyEvent::Fork->new_exec >> and
666     L<AnyEvent::Fork::Template> are direct children, and you are responsible
667     to clean up their zombies when they die.
668    
669     All other processes are not direct children, and will be cleaned up by
670 root 1.30 AnyEvent::Fork itself.
671 root 1.20
672     =cut
673    
674     sub pid {
675 root 1.42 $_[0][PID]
676 root 1.20 }
677    
678 root 1.9 =item $proc = $proc->eval ($perlcode, @args)
679    
680 root 1.44 Evaluates the given C<$perlcode> as ... Perl code, while setting C<@_> to
681 root 1.23 the strings specified by C<@args>, in the "main" package.
682 root 1.9
683     This call is meant to do any custom initialisation that might be required
684     (for example, the C<require> method uses it). It's not supposed to be used
685     to completely take over the process, use C<run> for that.
686    
687     The code will usually be executed after this call returns, and there is no
688     way to pass anything back to the calling process. Any evaluation errors
689     will be reported to stderr and cause the process to exit.
690    
691 root 1.33 If you want to execute some code (that isn't in a module) to take over the
692     process, you should compile a function via C<eval> first, and then call
693     it via C<run>. This also gives you access to any arguments passed via the
694     C<send_xxx> methods, such as file handles. See the L<use AnyEvent::Fork as
695 root 1.34 a faster fork+exec> example to see it in action.
696 root 1.23
697 root 1.9 Returns the process object for easy chaining of method calls.
698    
699     =cut
700    
701     sub eval {
702     my ($self, $code, @args) = @_;
703    
704 root 1.19 $self->_cmd (e => pack "(w/a*)*", $code, @args);
705 root 1.9
706     $self
707     }
708    
709 root 1.4 =item $proc = $proc->require ($module, ...)
710 root 1.1
711 root 1.9 Tries to load the given module(s) into the process
712 root 1.1
713 root 1.4 Returns the process object for easy chaining of method calls.
714 root 1.1
715 root 1.9 =cut
716    
717     sub require {
718     my ($self, @modules) = @_;
719    
720     s%::%/%g for @modules;
721     $self->eval ('require "$_.pm" for @_', @modules);
722    
723     $self
724     }
725    
726 root 1.4 =item $proc = $proc->send_fh ($handle, ...)
727 root 1.1
728 root 1.4 Send one or more file handles (I<not> file descriptors) to the process,
729     to prepare a call to C<run>.
730 root 1.1
731 root 1.35 The process object keeps a reference to the handles until they have
732     been passed over to the process, so you must not explicitly close the
733     handles. This is most easily accomplished by simply not storing the file
734     handles anywhere after passing them to this method - when AnyEvent::Fork
735     is finished using them, perl will automatically close them.
736 root 1.4
737     Returns the process object for easy chaining of method calls.
738    
739 root 1.17 Example: pass a file handle to a process, and release it without
740     closing. It will be closed automatically when it is no longer used.
741 root 1.9
742     $proc->send_fh ($my_fh);
743     undef $my_fh; # free the reference if you want, but DO NOT CLOSE IT
744    
745 root 1.4 =cut
746    
747     sub send_fh {
748     my ($self, @fh) = @_;
749    
750     for my $fh (@fh) {
751     $self->_cmd ("h");
752 root 1.42 push @{ $self->[QUEUE] }, \$fh;
753 root 1.4 }
754    
755     $self
756 root 1.1 }
757    
758 root 1.4 =item $proc = $proc->send_arg ($string, ...)
759    
760     Send one or more argument strings to the process, to prepare a call to
761 root 1.35 C<run>. The strings can be any octet strings.
762 root 1.4
763 root 1.18 The protocol is optimised to pass a moderate number of relatively short
764     strings - while you can pass up to 4GB of data in one go, this is more
765     meant to pass some ID information or other startup info, not big chunks of
766     data.
767    
768 root 1.17 Returns the process object for easy chaining of method calls.
769 root 1.4
770     =cut
771 root 1.1
772 root 1.4 sub send_arg {
773     my ($self, @arg) = @_;
774 root 1.1
775 root 1.19 $self->_cmd (a => pack "(w/a*)*", @arg);
776 root 1.1
777     $self
778     }
779    
780 root 1.4 =item $proc->run ($func, $cb->($fh))
781    
782 root 1.23 Enter the function specified by the function name in C<$func> in the
783     process. The function is called with the communication socket as first
784 root 1.4 argument, followed by all file handles and string arguments sent earlier
785     via C<send_fh> and C<send_arg> methods, in the order they were called.
786    
787 root 1.35 The process object becomes unusable on return from this function - any
788     further method calls result in undefined behaviour.
789    
790 root 1.23 The function name should be fully qualified, but if it isn't, it will be
791 root 1.35 looked up in the C<main> package.
792 root 1.4
793 root 1.23 If the called function returns, doesn't exist, or any error occurs, the
794     process exits.
795 root 1.4
796 root 1.23 Preparing the process is done in the background - when all commands have
797     been sent, the callback is invoked with the local communications socket
798     as argument. At this point you can start using the socket in any way you
799     like.
800    
801 root 1.4 If the communication socket isn't used, it should be closed on both sides,
802     to save on kernel memory.
803    
804     The socket is non-blocking in the parent, and blocking in the newly
805 root 1.23 created process. The close-on-exec flag is set in both.
806    
807     Even if not used otherwise, the socket can be a good indicator for the
808     existence of the process - if the other process exits, you get a readable
809     event on it, because exiting the process closes the socket (if it didn't
810     create any children using fork).
811 root 1.4
812 root 1.9 Example: create a template for a process pool, pass a few strings, some
813     file handles, then fork, pass one more string, and run some code.
814    
815     my $pool = AnyEvent::Fork
816     ->new
817     ->send_arg ("str1", "str2")
818     ->send_fh ($fh1, $fh2);
819    
820     for (1..2) {
821     $pool
822     ->fork
823     ->send_arg ("str3")
824     ->run ("Some::function", sub {
825     my ($fh) = @_;
826    
827     # fh is nonblocking, but we trust that the OS can accept these
828 root 1.22 # few octets anyway.
829 root 1.9 syswrite $fh, "hi #$_\n";
830    
831     # $fh is being closed here, as we don't store it anywhere
832     });
833     }
834    
835     # Some::function might look like this - all parameters passed before fork
836     # and after will be passed, in order, after the communications socket.
837     sub Some::function {
838     my ($fh, $str1, $str2, $fh1, $fh2, $str3) = @_;
839    
840 root 1.22 print scalar <$fh>; # prints "hi #1\n" and "hi #2\n" in any order
841 root 1.9 }
842    
843 root 1.4 =cut
844    
845     sub run {
846     my ($self, $func, $cb) = @_;
847    
848 root 1.42 $self->[CB] = $cb;
849 root 1.9 $self->_cmd (r => $func);
850 root 1.4 }
851    
852 root 1.53 =back
853    
854     =head2 ADVANCED METHODS
855    
856     =over 4
857    
858     =item new_from_stdio AnyEvent::Fork $fh
859    
860     Assume that you have a perl interpreter running (without any special
861     options or a program) somewhere and it has it's STDIN and STDOUT connected
862     to the C<$fh> somehow. I.e. exactly the state perl is in when you start it
863     without any arguments:
864    
865     perl
866    
867     Then you can create an C<AnyEvent::Fork> object out of this perl
868     interpreter with this constructor.
869    
870     When the usefulness of this isn't immediately clear, imagine you manage to
871     run a perl interpreter remotely (F<ssh remotemachine perl>), then you can
872     manage it mostly like a local C<AnyEvent::Fork> child.
873    
874     This works without any module support, i.e. the remote F<perl> does not
875     need to have any special modules installed.
876    
877     There are a number of limitations though: C<send_fh> will only work if the
878     L<IO::FDPass> module is loadable by the remote perl and the two processes
879     are connected in a way that let's L<IO::FDPass> do it's work.
880    
881     This will therefore not work over a network conenction. From this follows
882     that C<fork> will also not work under these circumstances, as it relies on
883     C<send_fh> internally.
884    
885     =cut
886    
887     sub new_from_stdio {
888     my ($class, $fh) = @_;
889    
890     my $self = $class->_new ($fh);
891    
892     # send startup code
893     push @{ $self->[QUEUE] },
894     (do "AnyEvent/Fork/serve.pl")
895     . <<'EOF';
896     {
897     open my $fh, "+<&0"
898     or die "AnyEvent::Fork::Serve::stdio: unable to open communications socket: $!\n";
899     open STDIN , ">&2";
900     open STDOUT, ">&2";
901    
902     $OWNER = "another process";
903     $0 = "AnyEvent::Fork/stdio of $OWNER";
904    
905     @_ = $fh;
906     }
907    
908     &serve;
909     __END__
910     EOF
911    
912     # the data is only sent when the user requests additional things, which
913     # is likely early enough for our purposes.
914    
915     $self
916     }
917    
918     =back
919    
920     =head2 EXPERIMENTAL METHODS
921    
922     These methods might go away completely or change behaviour, a any time.
923    
924     =over 4
925    
926 root 1.50 =item $proc->to_fh ($cb->($fh)) # EXPERIMENTAL, MIGHT BE REMOVED
927 root 1.48
928     Flushes all commands out to the process and then calls the callback with
929     the communications socket.
930    
931     The process object becomes unusable on return from this function - any
932     further method calls result in undefined behaviour.
933    
934     The point of this method is to give you a file handle thta you cna pass
935     to another process. In that other process, you can call C<new_from_fh
936 root 1.51 AnyEvent::Fork> to create a new C<AnyEvent::Fork> object from it, thereby
937     effectively passing a fork object to another process.
938 root 1.48
939     =cut
940    
941     sub to_fh {
942     my ($self, $cb) = @_;
943    
944     $self->[CB] = $cb;
945    
946     unless ($self->[WW]) {
947     $self->[CB]->($self->[FH]);
948     @$self = ();
949     }
950     }
951    
952 root 1.50 =item new_from_fh AnyEvent::Fork $fh # EXPERIMENTAL, MIGHT BE REMOVED
953 root 1.48
954     Takes a file handle originally rceeived by the C<to_fh> method and creates
955     a new C<AnyEvent:Fork> object. The child process itself will not change in
956     any way, i.e. it will keep all the modifications done to it before calling
957     C<to_fh>.
958    
959     The new object is very much like the original object, except that the
960     C<pid> method will return C<undef> even if the process is a direct child.
961    
962     =cut
963    
964     sub new_from_fh {
965     my ($class, $fh) = @_;
966    
967     $class->_new ($fh)
968     }
969    
970 root 1.1 =back
971    
972 root 1.16 =head1 PERFORMANCE
973    
974     Now for some unscientific benchmark numbers (all done on an amd64
975     GNU/Linux box). These are intended to give you an idea of the relative
976 root 1.18 performance you can expect, they are not meant to be absolute performance
977     numbers.
978 root 1.16
979 root 1.17 OK, so, I ran a simple benchmark that creates a socket pair, forks, calls
980 root 1.16 exit in the child and waits for the socket to close in the parent. I did
981 root 1.18 load AnyEvent, EV and AnyEvent::Fork, for a total process size of 5100kB.
982 root 1.16
983 root 1.18 2079 new processes per second, using manual socketpair + fork
984 root 1.16
985     Then I did the same thing, but instead of calling fork, I called
986     AnyEvent::Fork->new->run ("CORE::exit") and then again waited for the
987 root 1.48 socket from the child to close on exit. This does the same thing as manual
988 root 1.17 socket pair + fork, except that what is forked is the template process
989 root 1.16 (2440kB), and the socket needs to be passed to the server at the other end
990     of the socket first.
991    
992     2307 new processes per second, using AnyEvent::Fork->new
993    
994     And finally, using C<new_exec> instead C<new>, using vforks+execs to exec
995     a new perl interpreter and compile the small server each time, I get:
996    
997     479 vfork+execs per second, using AnyEvent::Fork->new_exec
998    
999 root 1.17 So how can C<< AnyEvent->new >> be faster than a standard fork, even
1000     though it uses the same operations, but adds a lot of overhead?
1001 root 1.16
1002 root 1.36 The difference is simply the process size: forking the 5MB process takes
1003     so much longer than forking the 2.5MB template process that the extra
1004 root 1.43 overhead is canceled out.
1005 root 1.16
1006     If the benchmark process grows, the normal fork becomes even slower:
1007    
1008 root 1.36 1340 new processes, manual fork of a 20MB process
1009     731 new processes, manual fork of a 200MB process
1010     235 new processes, manual fork of a 2000MB process
1011    
1012     What that means (to me) is that I can use this module without having a bad
1013     conscience because of the extra overhead required to start new processes.
1014 root 1.16
1015 root 1.15 =head1 TYPICAL PROBLEMS
1016    
1017     This section lists typical problems that remain. I hope by recognising
1018     them, most can be avoided.
1019    
1020     =over 4
1021    
1022 root 1.36 =item leaked file descriptors for exec'ed processes
1023 root 1.15
1024     POSIX systems inherit file descriptors by default when exec'ing a new
1025     process. While perl itself laudably sets the close-on-exec flags on new
1026     file handles, most C libraries don't care, and even if all cared, it's
1027     often not possible to set the flag in a race-free manner.
1028    
1029     That means some file descriptors can leak through. And since it isn't
1030 root 1.17 possible to know which file descriptors are "good" and "necessary" (or
1031     even to know which file descriptors are open), there is no good way to
1032 root 1.15 close the ones that might harm.
1033    
1034     As an example of what "harm" can be done consider a web server that
1035     accepts connections and afterwards some module uses AnyEvent::Fork for the
1036     first time, causing it to fork and exec a new process, which might inherit
1037     the network socket. When the server closes the socket, it is still open
1038     in the child (which doesn't even know that) and the client might conclude
1039     that the connection is still fine.
1040    
1041     For the main program, there are multiple remedies available -
1042     L<AnyEvent::Fork::Early> is one, creating a process early and not using
1043     C<new_exec> is another, as in both cases, the first process can be exec'ed
1044     well before many random file descriptors are open.
1045    
1046     In general, the solution for these kind of problems is to fix the
1047     libraries or the code that leaks those file descriptors.
1048    
1049 root 1.17 Fortunately, most of these leaked descriptors do no harm, other than
1050 root 1.15 sitting on some resources.
1051    
1052 root 1.36 =item leaked file descriptors for fork'ed processes
1053 root 1.15
1054     Normally, L<AnyEvent::Fork> does start new processes by exec'ing them,
1055     which closes file descriptors not marked for being inherited.
1056    
1057     However, L<AnyEvent::Fork::Early> and L<AnyEvent::Fork::Template> offer
1058     a way to create these processes by forking, and this leaks more file
1059     descriptors than exec'ing them, as there is no way to mark descriptors as
1060     "close on fork".
1061    
1062     An example would be modules like L<EV>, L<IO::AIO> or L<Gtk2>. Both create
1063     pipes for internal uses, and L<Gtk2> might open a connection to the X
1064     server. L<EV> and L<IO::AIO> can deal with fork, but Gtk2 might have
1065     trouble with a fork.
1066    
1067     The solution is to either not load these modules before use'ing
1068     L<AnyEvent::Fork::Early> or L<AnyEvent::Fork::Template>, or to delay
1069     initialising them, for example, by calling C<init Gtk2> manually.
1070    
1071 root 1.37 =item exiting calls object destructors
1072 root 1.19
1073 root 1.38 This only applies to users of L<AnyEvent::Fork:Early> and
1074 root 1.44 L<AnyEvent::Fork::Template>, or when initialising code creates objects
1075 root 1.38 that reference external resources.
1076 root 1.19
1077     When a process created by AnyEvent::Fork exits, it might do so by calling
1078     exit, or simply letting perl reach the end of the program. At which point
1079     Perl runs all destructors.
1080    
1081     Not all destructors are fork-safe - for example, an object that represents
1082     the connection to an X display might tell the X server to free resources,
1083     which is inconvenient when the "real" object in the parent still needs to
1084     use them.
1085    
1086     This is obviously not a problem for L<AnyEvent::Fork::Early>, as you used
1087     it as the very first thing, right?
1088    
1089     It is a problem for L<AnyEvent::Fork::Template> though - and the solution
1090     is to not create objects with nontrivial destructors that might have an
1091     effect outside of Perl.
1092    
1093 root 1.15 =back
1094    
1095 root 1.8 =head1 PORTABILITY NOTES
1096    
1097 root 1.10 Native win32 perls are somewhat supported (AnyEvent::Fork::Early is a nop,
1098     and ::Template is not going to work), and it cost a lot of blood and sweat
1099     to make it so, mostly due to the bloody broken perl that nobody seems to
1100     care about. The fork emulation is a bad joke - I have yet to see something
1101 root 1.17 useful that you can do with it without running into memory corruption
1102 root 1.10 issues or other braindamage. Hrrrr.
1103    
1104 root 1.49 Since fork is endlessly broken on win32 perls (it doesn't even remotely
1105     work within it's documented limits) and quite obviously it's not getting
1106     improved any time soon, the best way to proceed on windows would be to
1107     always use C<new_exec> and thus never rely on perl's fork "emulation".
1108    
1109 root 1.36 Cygwin perl is not supported at the moment due to some hilarious
1110 root 1.49 shortcomings of its API - see L<IO::FDPoll> for more details. If you never
1111     use C<send_fh> and always use C<new_exec> to create processes, it should
1112     work though.
1113 root 1.8
1114 root 1.13 =head1 SEE ALSO
1115    
1116 root 1.46 L<AnyEvent::Fork::Early>, to avoid executing a perl interpreter at all
1117     (part of this distribution).
1118    
1119     L<AnyEvent::Fork::Template>, to create a process by forking the main
1120     program at a convenient time (part of this distribution).
1121    
1122     L<AnyEvent::Fork::RPC>, for simple RPC to child processes (on CPAN).
1123 root 1.13
1124 root 1.51 L<AnyEvent::Fork::Pool>, for simple worker process pool (on CPAN).
1125    
1126 root 1.43 =head1 AUTHOR AND CONTACT INFORMATION
1127 root 1.1
1128     Marc Lehmann <schmorp@schmorp.de>
1129 root 1.43 http://software.schmorp.de/pkg/AnyEvent-Fork
1130 root 1.1
1131     =cut
1132    
1133     1
1134