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