ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-Fork/Fork.pm
Revision: 1.61
Committed: Wed Nov 20 15:24:28 2013 UTC (10 years, 5 months ago) by root
Branch: MAIN
Changes since 1.60: +3 -3 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 root 1.61 When you want to be stingy with files, you can put your code into the
262 root 1.51 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 root 1.61 files - even when using a C<DATA> section, you still need to C<exec> an
282     external perl interpreter, which might not be available when using
283 root 1.51 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.60 our $VERSION = 1.2;
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.55 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.57 C<$^X> is investigated to see if the path ends with something that looks
611 root 1.4 as if it were the perl interpreter. Failing this, the module falls back to
612     using C<$Config::Config{perlpath}>.
613    
614 root 1.56 The path to perl can also be overriden by setting the global variable
615     C<$AnyEvent::Fork::PERL> - it's value will be used for all subsequent
616     invocations.
617    
618 root 1.4 =cut
619    
620 root 1.56 our $PERL;
621    
622 root 1.4 sub new_exec {
623     my ($self) = @_;
624    
625 root 1.5 return $EARLY->fork
626     if $EARLY;
627    
628 root 1.56 unless (defined $PERL) {
629     # first find path of perl
630     my $perl = $;
631    
632     # first we try $^X, but the path must be absolute (always on win32), and end in sth.
633     # that looks like perl. this obviously only works for posix and win32
634     unless (
635     ($^O eq "MSWin32" || $perl =~ m%^/%)
636     && $perl =~ m%[/\\]perl(?:[0-9]+(\.[0-9]+)+)?(\.exe)?$%i
637     ) {
638     # if it doesn't look perlish enough, try Config
639     require Config;
640     $perl = $Config::Config{perlpath};
641     $perl =~ s/(?:\Q$Config::Config{_exe}\E)?$/$Config::Config{_exe}/;
642     }
643 root 1.4
644 root 1.56 $PERL = $perl;
645 root 1.4 }
646    
647     require Proc::FastSpawn;
648    
649     my ($fh, $slave) = AnyEvent::Util::portable_socketpair;
650     Proc::FastSpawn::fd_inherit (fileno $slave);
651    
652 root 1.10 # new fh's should always be set cloexec (due to $^F),
653     # but hey, not on win32, so we always clear the inherit flag.
654     Proc::FastSpawn::fd_inherit (fileno $fh, 0);
655    
656 root 1.4 # quick. also doesn't work in win32. of course. what did you expect
657     #local $ENV{PERL5LIB} = join ":", grep !ref, @INC;
658 root 1.1 my %env = %ENV;
659 root 1.15 $env{PERL5LIB} = join +($^O eq "MSWin32" ? ";" : ":"), grep !ref, @INC;
660 root 1.1
661 root 1.19 my $pid = Proc::FastSpawn::spawn (
662 root 1.56 $PERL,
663 root 1.7 ["perl", "-MAnyEvent::Fork::Serve", "-e", "AnyEvent::Fork::Serve::me", fileno $slave, $$],
664 root 1.4 [map "$_=$env{$_}", keys %env],
665     ) or die "unable to spawn AnyEvent::Fork server: $!";
666    
667 root 1.19 $self->_new ($fh, $pid)
668 root 1.4 }
669    
670 root 1.20 =item $pid = $proc->pid
671    
672     Returns the process id of the process I<iff it is a direct child of the
673 root 1.59 process running AnyEvent::Fork>, and C<undef> otherwise. As a general
674     rule (that you cannot rely upon), processes created via C<new_exec>,
675     L<AnyEvent::Fork::Early> or L<AnyEvent::Fork::Template> are direct
676     children, while all other processes are not.
677    
678     Or in other words, you do not normally have to take care of zombies for
679     processes created via C<new>, but when in doubt, or zombies are a problem,
680     you need to check whether a process is a diretc child by calling this
681     method, and possibly creating a child watcher or reap it manually.
682 root 1.20
683     =cut
684    
685     sub pid {
686 root 1.42 $_[0][PID]
687 root 1.20 }
688    
689 root 1.9 =item $proc = $proc->eval ($perlcode, @args)
690    
691 root 1.44 Evaluates the given C<$perlcode> as ... Perl code, while setting C<@_> to
692 root 1.23 the strings specified by C<@args>, in the "main" package.
693 root 1.9
694     This call is meant to do any custom initialisation that might be required
695     (for example, the C<require> method uses it). It's not supposed to be used
696     to completely take over the process, use C<run> for that.
697    
698     The code will usually be executed after this call returns, and there is no
699     way to pass anything back to the calling process. Any evaluation errors
700     will be reported to stderr and cause the process to exit.
701    
702 root 1.33 If you want to execute some code (that isn't in a module) to take over the
703     process, you should compile a function via C<eval> first, and then call
704     it via C<run>. This also gives you access to any arguments passed via the
705     C<send_xxx> methods, such as file handles. See the L<use AnyEvent::Fork as
706 root 1.34 a faster fork+exec> example to see it in action.
707 root 1.23
708 root 1.9 Returns the process object for easy chaining of method calls.
709    
710     =cut
711    
712     sub eval {
713     my ($self, $code, @args) = @_;
714    
715 root 1.19 $self->_cmd (e => pack "(w/a*)*", $code, @args);
716 root 1.9
717     $self
718     }
719    
720 root 1.4 =item $proc = $proc->require ($module, ...)
721 root 1.1
722 root 1.9 Tries to load the given module(s) into the process
723 root 1.1
724 root 1.4 Returns the process object for easy chaining of method calls.
725 root 1.1
726 root 1.9 =cut
727    
728     sub require {
729     my ($self, @modules) = @_;
730    
731     s%::%/%g for @modules;
732     $self->eval ('require "$_.pm" for @_', @modules);
733    
734     $self
735     }
736    
737 root 1.4 =item $proc = $proc->send_fh ($handle, ...)
738 root 1.1
739 root 1.4 Send one or more file handles (I<not> file descriptors) to the process,
740     to prepare a call to C<run>.
741 root 1.1
742 root 1.35 The process object keeps a reference to the handles until they have
743     been passed over to the process, so you must not explicitly close the
744     handles. This is most easily accomplished by simply not storing the file
745     handles anywhere after passing them to this method - when AnyEvent::Fork
746     is finished using them, perl will automatically close them.
747 root 1.4
748     Returns the process object for easy chaining of method calls.
749    
750 root 1.17 Example: pass a file handle to a process, and release it without
751     closing. It will be closed automatically when it is no longer used.
752 root 1.9
753     $proc->send_fh ($my_fh);
754     undef $my_fh; # free the reference if you want, but DO NOT CLOSE IT
755    
756 root 1.4 =cut
757    
758     sub send_fh {
759     my ($self, @fh) = @_;
760    
761     for my $fh (@fh) {
762     $self->_cmd ("h");
763 root 1.42 push @{ $self->[QUEUE] }, \$fh;
764 root 1.4 }
765    
766     $self
767 root 1.1 }
768    
769 root 1.4 =item $proc = $proc->send_arg ($string, ...)
770    
771     Send one or more argument strings to the process, to prepare a call to
772 root 1.35 C<run>. The strings can be any octet strings.
773 root 1.4
774 root 1.18 The protocol is optimised to pass a moderate number of relatively short
775     strings - while you can pass up to 4GB of data in one go, this is more
776     meant to pass some ID information or other startup info, not big chunks of
777     data.
778    
779 root 1.17 Returns the process object for easy chaining of method calls.
780 root 1.4
781     =cut
782 root 1.1
783 root 1.4 sub send_arg {
784     my ($self, @arg) = @_;
785 root 1.1
786 root 1.19 $self->_cmd (a => pack "(w/a*)*", @arg);
787 root 1.1
788     $self
789     }
790    
791 root 1.4 =item $proc->run ($func, $cb->($fh))
792    
793 root 1.23 Enter the function specified by the function name in C<$func> in the
794     process. The function is called with the communication socket as first
795 root 1.4 argument, followed by all file handles and string arguments sent earlier
796     via C<send_fh> and C<send_arg> methods, in the order they were called.
797    
798 root 1.35 The process object becomes unusable on return from this function - any
799     further method calls result in undefined behaviour.
800    
801 root 1.23 The function name should be fully qualified, but if it isn't, it will be
802 root 1.35 looked up in the C<main> package.
803 root 1.4
804 root 1.23 If the called function returns, doesn't exist, or any error occurs, the
805     process exits.
806 root 1.4
807 root 1.23 Preparing the process is done in the background - when all commands have
808     been sent, the callback is invoked with the local communications socket
809     as argument. At this point you can start using the socket in any way you
810     like.
811    
812 root 1.4 If the communication socket isn't used, it should be closed on both sides,
813     to save on kernel memory.
814    
815     The socket is non-blocking in the parent, and blocking in the newly
816 root 1.23 created process. The close-on-exec flag is set in both.
817    
818     Even if not used otherwise, the socket can be a good indicator for the
819     existence of the process - if the other process exits, you get a readable
820     event on it, because exiting the process closes the socket (if it didn't
821     create any children using fork).
822 root 1.4
823 root 1.58 =over 4
824    
825     =item Compatibility to L<AnyEvent::Fork::Remote>
826    
827     If you want to write code that works with both this module and
828     L<AnyEvent::Fork::Remote>, you need to write your code so that it assumes
829     there are two file handles for communications, which might not be unix
830     domain sockets. The C<run> function should start like this:
831    
832     sub run {
833     my ($rfh, @args) = @_; # @args is your normal arguments
834     my $wfh = fileno $rfh ? $rfh : *STDOUT;
835    
836     # now use $rfh for reading and $wfh for writing
837     }
838    
839     This checks whether the passed file handle is, in fact, the process
840     C<STDIN> handle. If it is, then the function was invoked visa
841     L<AnyEvent::Fork::Remote>, so STDIN should be used for reading and
842     C<STDOUT> should be used for writing.
843    
844     In all other cases, the function was called via this module, and there is
845     only one file handle that should be sued for reading and writing.
846    
847     =back
848    
849 root 1.9 Example: create a template for a process pool, pass a few strings, some
850     file handles, then fork, pass one more string, and run some code.
851    
852     my $pool = AnyEvent::Fork
853     ->new
854     ->send_arg ("str1", "str2")
855     ->send_fh ($fh1, $fh2);
856    
857     for (1..2) {
858     $pool
859     ->fork
860     ->send_arg ("str3")
861     ->run ("Some::function", sub {
862     my ($fh) = @_;
863    
864     # fh is nonblocking, but we trust that the OS can accept these
865 root 1.22 # few octets anyway.
866 root 1.9 syswrite $fh, "hi #$_\n";
867    
868     # $fh is being closed here, as we don't store it anywhere
869     });
870     }
871    
872     # Some::function might look like this - all parameters passed before fork
873     # and after will be passed, in order, after the communications socket.
874     sub Some::function {
875     my ($fh, $str1, $str2, $fh1, $fh2, $str3) = @_;
876    
877 root 1.22 print scalar <$fh>; # prints "hi #1\n" and "hi #2\n" in any order
878 root 1.9 }
879    
880 root 1.4 =cut
881    
882     sub run {
883     my ($self, $func, $cb) = @_;
884    
885 root 1.42 $self->[CB] = $cb;
886 root 1.9 $self->_cmd (r => $func);
887 root 1.4 }
888    
889 root 1.53 =back
890    
891     =head2 EXPERIMENTAL METHODS
892    
893 root 1.55 These methods might go away completely or change behaviour, at any time.
894 root 1.53
895     =over 4
896    
897 root 1.50 =item $proc->to_fh ($cb->($fh)) # EXPERIMENTAL, MIGHT BE REMOVED
898 root 1.48
899     Flushes all commands out to the process and then calls the callback with
900     the communications socket.
901    
902     The process object becomes unusable on return from this function - any
903     further method calls result in undefined behaviour.
904    
905 root 1.58 The point of this method is to give you a file handle that you can pass
906 root 1.48 to another process. In that other process, you can call C<new_from_fh
907 root 1.58 AnyEvent::Fork $fh> to create a new C<AnyEvent::Fork> object from it,
908     thereby effectively passing a fork object to another process.
909 root 1.48
910     =cut
911    
912     sub to_fh {
913     my ($self, $cb) = @_;
914    
915     $self->[CB] = $cb;
916    
917     unless ($self->[WW]) {
918     $self->[CB]->($self->[FH]);
919     @$self = ();
920     }
921     }
922    
923 root 1.50 =item new_from_fh AnyEvent::Fork $fh # EXPERIMENTAL, MIGHT BE REMOVED
924 root 1.48
925     Takes a file handle originally rceeived by the C<to_fh> method and creates
926     a new C<AnyEvent:Fork> object. The child process itself will not change in
927     any way, i.e. it will keep all the modifications done to it before calling
928     C<to_fh>.
929    
930     The new object is very much like the original object, except that the
931     C<pid> method will return C<undef> even if the process is a direct child.
932    
933     =cut
934    
935     sub new_from_fh {
936     my ($class, $fh) = @_;
937    
938     $class->_new ($fh)
939     }
940    
941 root 1.1 =back
942    
943 root 1.16 =head1 PERFORMANCE
944    
945     Now for some unscientific benchmark numbers (all done on an amd64
946     GNU/Linux box). These are intended to give you an idea of the relative
947 root 1.18 performance you can expect, they are not meant to be absolute performance
948     numbers.
949 root 1.16
950 root 1.17 OK, so, I ran a simple benchmark that creates a socket pair, forks, calls
951 root 1.16 exit in the child and waits for the socket to close in the parent. I did
952 root 1.18 load AnyEvent, EV and AnyEvent::Fork, for a total process size of 5100kB.
953 root 1.16
954 root 1.18 2079 new processes per second, using manual socketpair + fork
955 root 1.16
956     Then I did the same thing, but instead of calling fork, I called
957     AnyEvent::Fork->new->run ("CORE::exit") and then again waited for the
958 root 1.48 socket from the child to close on exit. This does the same thing as manual
959 root 1.17 socket pair + fork, except that what is forked is the template process
960 root 1.16 (2440kB), and the socket needs to be passed to the server at the other end
961     of the socket first.
962    
963     2307 new processes per second, using AnyEvent::Fork->new
964    
965     And finally, using C<new_exec> instead C<new>, using vforks+execs to exec
966     a new perl interpreter and compile the small server each time, I get:
967    
968     479 vfork+execs per second, using AnyEvent::Fork->new_exec
969    
970 root 1.17 So how can C<< AnyEvent->new >> be faster than a standard fork, even
971     though it uses the same operations, but adds a lot of overhead?
972 root 1.16
973 root 1.36 The difference is simply the process size: forking the 5MB process takes
974     so much longer than forking the 2.5MB template process that the extra
975 root 1.43 overhead is canceled out.
976 root 1.16
977     If the benchmark process grows, the normal fork becomes even slower:
978    
979 root 1.36 1340 new processes, manual fork of a 20MB process
980     731 new processes, manual fork of a 200MB process
981     235 new processes, manual fork of a 2000MB process
982    
983     What that means (to me) is that I can use this module without having a bad
984     conscience because of the extra overhead required to start new processes.
985 root 1.16
986 root 1.15 =head1 TYPICAL PROBLEMS
987    
988     This section lists typical problems that remain. I hope by recognising
989     them, most can be avoided.
990    
991     =over 4
992    
993 root 1.36 =item leaked file descriptors for exec'ed processes
994 root 1.15
995     POSIX systems inherit file descriptors by default when exec'ing a new
996     process. While perl itself laudably sets the close-on-exec flags on new
997     file handles, most C libraries don't care, and even if all cared, it's
998     often not possible to set the flag in a race-free manner.
999    
1000     That means some file descriptors can leak through. And since it isn't
1001 root 1.17 possible to know which file descriptors are "good" and "necessary" (or
1002     even to know which file descriptors are open), there is no good way to
1003 root 1.15 close the ones that might harm.
1004    
1005     As an example of what "harm" can be done consider a web server that
1006     accepts connections and afterwards some module uses AnyEvent::Fork for the
1007     first time, causing it to fork and exec a new process, which might inherit
1008     the network socket. When the server closes the socket, it is still open
1009     in the child (which doesn't even know that) and the client might conclude
1010     that the connection is still fine.
1011    
1012     For the main program, there are multiple remedies available -
1013     L<AnyEvent::Fork::Early> is one, creating a process early and not using
1014     C<new_exec> is another, as in both cases, the first process can be exec'ed
1015     well before many random file descriptors are open.
1016    
1017     In general, the solution for these kind of problems is to fix the
1018     libraries or the code that leaks those file descriptors.
1019    
1020 root 1.17 Fortunately, most of these leaked descriptors do no harm, other than
1021 root 1.15 sitting on some resources.
1022    
1023 root 1.36 =item leaked file descriptors for fork'ed processes
1024 root 1.15
1025     Normally, L<AnyEvent::Fork> does start new processes by exec'ing them,
1026     which closes file descriptors not marked for being inherited.
1027    
1028     However, L<AnyEvent::Fork::Early> and L<AnyEvent::Fork::Template> offer
1029     a way to create these processes by forking, and this leaks more file
1030     descriptors than exec'ing them, as there is no way to mark descriptors as
1031     "close on fork".
1032    
1033     An example would be modules like L<EV>, L<IO::AIO> or L<Gtk2>. Both create
1034     pipes for internal uses, and L<Gtk2> might open a connection to the X
1035     server. L<EV> and L<IO::AIO> can deal with fork, but Gtk2 might have
1036     trouble with a fork.
1037    
1038     The solution is to either not load these modules before use'ing
1039     L<AnyEvent::Fork::Early> or L<AnyEvent::Fork::Template>, or to delay
1040     initialising them, for example, by calling C<init Gtk2> manually.
1041    
1042 root 1.37 =item exiting calls object destructors
1043 root 1.19
1044 root 1.38 This only applies to users of L<AnyEvent::Fork:Early> and
1045 root 1.44 L<AnyEvent::Fork::Template>, or when initialising code creates objects
1046 root 1.38 that reference external resources.
1047 root 1.19
1048     When a process created by AnyEvent::Fork exits, it might do so by calling
1049     exit, or simply letting perl reach the end of the program. At which point
1050     Perl runs all destructors.
1051    
1052     Not all destructors are fork-safe - for example, an object that represents
1053     the connection to an X display might tell the X server to free resources,
1054     which is inconvenient when the "real" object in the parent still needs to
1055     use them.
1056    
1057     This is obviously not a problem for L<AnyEvent::Fork::Early>, as you used
1058     it as the very first thing, right?
1059    
1060     It is a problem for L<AnyEvent::Fork::Template> though - and the solution
1061     is to not create objects with nontrivial destructors that might have an
1062     effect outside of Perl.
1063    
1064 root 1.15 =back
1065    
1066 root 1.8 =head1 PORTABILITY NOTES
1067    
1068 root 1.10 Native win32 perls are somewhat supported (AnyEvent::Fork::Early is a nop,
1069     and ::Template is not going to work), and it cost a lot of blood and sweat
1070     to make it so, mostly due to the bloody broken perl that nobody seems to
1071     care about. The fork emulation is a bad joke - I have yet to see something
1072 root 1.17 useful that you can do with it without running into memory corruption
1073 root 1.10 issues or other braindamage. Hrrrr.
1074    
1075 root 1.49 Since fork is endlessly broken on win32 perls (it doesn't even remotely
1076     work within it's documented limits) and quite obviously it's not getting
1077     improved any time soon, the best way to proceed on windows would be to
1078     always use C<new_exec> and thus never rely on perl's fork "emulation".
1079    
1080 root 1.36 Cygwin perl is not supported at the moment due to some hilarious
1081 root 1.49 shortcomings of its API - see L<IO::FDPoll> for more details. If you never
1082     use C<send_fh> and always use C<new_exec> to create processes, it should
1083     work though.
1084 root 1.8
1085 root 1.13 =head1 SEE ALSO
1086    
1087 root 1.46 L<AnyEvent::Fork::Early>, to avoid executing a perl interpreter at all
1088     (part of this distribution).
1089    
1090     L<AnyEvent::Fork::Template>, to create a process by forking the main
1091     program at a convenient time (part of this distribution).
1092    
1093 root 1.57 L<AnyEvent::Fork::Remote>, for another way to create processes that is
1094     mostly compatible to this module and modules building on top of it, but
1095     works better with remote processes.
1096    
1097 root 1.46 L<AnyEvent::Fork::RPC>, for simple RPC to child processes (on CPAN).
1098 root 1.13
1099 root 1.51 L<AnyEvent::Fork::Pool>, for simple worker process pool (on CPAN).
1100    
1101 root 1.43 =head1 AUTHOR AND CONTACT INFORMATION
1102 root 1.1
1103     Marc Lehmann <schmorp@schmorp.de>
1104 root 1.43 http://software.schmorp.de/pkg/AnyEvent-Fork
1105 root 1.1
1106     =cut
1107    
1108     1
1109