ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-Fork/Fork.pm
(Generate patch)

Comparing AnyEvent-Fork/Fork.pm (file contents):
Revision 1.31 by root, Sat Apr 6 09:29:26 2013 UTC vs.
Revision 1.36 by root, Sat Apr 6 09:43:15 2013 UTC

152 152
153 # now $master_filehandle is connected to the 153 # now $master_filehandle is connected to the
154 # $slave_filehandle in the new process. 154 # $slave_filehandle in the new process.
155 }); 155 });
156 156
157MyModule might look like this: 157C<MyModule> might look like this:
158 158
159 package MyModule; 159 package MyModule;
160 160
161 sub worker { 161 sub worker {
162 my ($slave_filehandle) = @_; 162 my ($slave_filehandle) = @_;
185 } 185 }
186 186
187 # now do other things - maybe use the filehandle provided by run 187 # now do other things - maybe use the filehandle provided by run
188 # to wait for the processes to die. or whatever. 188 # to wait for the processes to die. or whatever.
189 189
190My::Server might look like this: 190C<My::Server> might look like this:
191 191
192 package My::Server; 192 package My::Server;
193 193
194 sub run { 194 sub run {
195 my ($slave, $listener, $id) = @_; 195 my ($slave, $listener, $id) = @_;
203 } 203 }
204 } 204 }
205 205
206=head2 use AnyEvent::Fork as a faster fork+exec 206=head2 use AnyEvent::Fork as a faster fork+exec
207 207
208This runs /bin/echo hi, with stdout redirected to /tmp/log and stderr to 208This runs C</bin/echo hi>, with stdandard output redirected to /tmp/log
209the communications socket. It is usually faster than fork+exec, but still 209and standard error redirected to the communications socket. It is usually
210let's you prepare the environment. 210faster than fork+exec, but still lets you prepare the environment.
211 211
212 open my $output, ">/tmp/log" or die "$!"; 212 open my $output, ">/tmp/log" or die "$!";
213 213
214 AnyEvent::Fork 214 AnyEvent::Fork
215 ->new 215 ->new
559} 559}
560 560
561=item $pid = $proc->pid 561=item $pid = $proc->pid
562 562
563Returns the process id of the process I<iff it is a direct child of the 563Returns the process id of the process I<iff it is a direct child of the
564process> running AnyEvent::Fork, and C<undef> otherwise. 564process running AnyEvent::Fork>, and C<undef> otherwise.
565 565
566Normally, only processes created via C<< AnyEvent::Fork->new_exec >> and 566Normally, only processes created via C<< AnyEvent::Fork->new_exec >> and
567L<AnyEvent::Fork::Template> are direct children, and you are responsible 567L<AnyEvent::Fork::Template> are direct children, and you are responsible
568to clean up their zombies when they die. 568to clean up their zombies when they die.
569 569
587 587
588The code will usually be executed after this call returns, and there is no 588The code will usually be executed after this call returns, and there is no
589way to pass anything back to the calling process. Any evaluation errors 589way to pass anything back to the calling process. Any evaluation errors
590will be reported to stderr and cause the process to exit. 590will be reported to stderr and cause the process to exit.
591 591
592If you want to execute some code to take over the process (see the 592If you want to execute some code (that isn't in a module) to take over the
593"fork+exec" example in the SYNOPSIS), you should compile a function via 593process, you should compile a function via C<eval> first, and then call
594C<eval> first, and then call it via C<run>. This also gives you access to 594it via C<run>. This also gives you access to any arguments passed via the
595any arguments passed via the C<send_xxx> methods, such as file handles. 595C<send_xxx> methods, such as file handles. See the L<use AnyEvent::Fork as
596a faster fork+exec> example to see it in action.
596 597
597Returns the process object for easy chaining of method calls. 598Returns the process object for easy chaining of method calls.
598 599
599=cut 600=cut
600 601
626=item $proc = $proc->send_fh ($handle, ...) 627=item $proc = $proc->send_fh ($handle, ...)
627 628
628Send one or more file handles (I<not> file descriptors) to the process, 629Send one or more file handles (I<not> file descriptors) to the process,
629to prepare a call to C<run>. 630to prepare a call to C<run>.
630 631
631The process object keeps a reference to the handles until this is done, 632The process object keeps a reference to the handles until they have
632so you must not explicitly close the handles. This is most easily 633been passed over to the process, so you must not explicitly close the
633accomplished by simply not storing the file handles anywhere after passing 634handles. This is most easily accomplished by simply not storing the file
634them to this method. 635handles anywhere after passing them to this method - when AnyEvent::Fork
636is finished using them, perl will automatically close them.
635 637
636Returns the process object for easy chaining of method calls. 638Returns the process object for easy chaining of method calls.
637 639
638Example: pass a file handle to a process, and release it without 640Example: pass a file handle to a process, and release it without
639closing. It will be closed automatically when it is no longer used. 641closing. It will be closed automatically when it is no longer used.
655} 657}
656 658
657=item $proc = $proc->send_arg ($string, ...) 659=item $proc = $proc->send_arg ($string, ...)
658 660
659Send one or more argument strings to the process, to prepare a call to 661Send one or more argument strings to the process, to prepare a call to
660C<run>. The strings can be any octet string. 662C<run>. The strings can be any octet strings.
661 663
662The protocol is optimised to pass a moderate number of relatively short 664The protocol is optimised to pass a moderate number of relatively short
663strings - while you can pass up to 4GB of data in one go, this is more 665strings - while you can pass up to 4GB of data in one go, this is more
664meant to pass some ID information or other startup info, not big chunks of 666meant to pass some ID information or other startup info, not big chunks of
665data. 667data.
681Enter the function specified by the function name in C<$func> in the 683Enter the function specified by the function name in C<$func> in the
682process. The function is called with the communication socket as first 684process. The function is called with the communication socket as first
683argument, followed by all file handles and string arguments sent earlier 685argument, followed by all file handles and string arguments sent earlier
684via C<send_fh> and C<send_arg> methods, in the order they were called. 686via C<send_fh> and C<send_arg> methods, in the order they were called.
685 687
688The process object becomes unusable on return from this function - any
689further method calls result in undefined behaviour.
690
686The function name should be fully qualified, but if it isn't, it will be 691The function name should be fully qualified, but if it isn't, it will be
687looked up in the main package. 692looked up in the C<main> package.
688 693
689If the called function returns, doesn't exist, or any error occurs, the 694If the called function returns, doesn't exist, or any error occurs, the
690process exits. 695process exits.
691 696
692Preparing the process is done in the background - when all commands have 697Preparing the process is done in the background - when all commands have
693been sent, the callback is invoked with the local communications socket 698been sent, the callback is invoked with the local communications socket
694as argument. At this point you can start using the socket in any way you 699as argument. At this point you can start using the socket in any way you
695like. 700like.
696
697The process object becomes unusable on return from this function - any
698further method calls result in undefined behaviour.
699 701
700If the communication socket isn't used, it should be closed on both sides, 702If the communication socket isn't used, it should be closed on both sides,
701to save on kernel memory. 703to save on kernel memory.
702 704
703The socket is non-blocking in the parent, and blocking in the newly 705The socket is non-blocking in the parent, and blocking in the newly
778 479 vfork+execs per second, using AnyEvent::Fork->new_exec 780 479 vfork+execs per second, using AnyEvent::Fork->new_exec
779 781
780So how can C<< AnyEvent->new >> be faster than a standard fork, even 782So how can C<< AnyEvent->new >> be faster than a standard fork, even
781though it uses the same operations, but adds a lot of overhead? 783though it uses the same operations, but adds a lot of overhead?
782 784
783The difference is simply the process size: forking the 6MB process takes 785The difference is simply the process size: forking the 5MB process takes
784so much longer than forking the 2.5MB template process that the overhead 786so much longer than forking the 2.5MB template process that the extra
785introduced is canceled out. 787overhead introduced is canceled out.
786 788
787If the benchmark process grows, the normal fork becomes even slower: 789If the benchmark process grows, the normal fork becomes even slower:
788 790
789 1340 new processes, manual fork in a 20MB process 791 1340 new processes, manual fork of a 20MB process
790 731 new processes, manual fork in a 200MB process 792 731 new processes, manual fork of a 200MB process
791 235 new processes, manual fork in a 2000MB process 793 235 new processes, manual fork of a 2000MB process
792 794
793What that means (to me) is that I can use this module without having a 795What that means (to me) is that I can use this module without having a bad
794very bad conscience because of the extra overhead required to start new 796conscience because of the extra overhead required to start new processes.
795processes.
796 797
797=head1 TYPICAL PROBLEMS 798=head1 TYPICAL PROBLEMS
798 799
799This section lists typical problems that remain. I hope by recognising 800This section lists typical problems that remain. I hope by recognising
800them, most can be avoided. 801them, most can be avoided.
801 802
802=over 4 803=over 4
803 804
804=item "leaked" file descriptors for exec'ed processes 805=item leaked file descriptors for exec'ed processes
805 806
806POSIX systems inherit file descriptors by default when exec'ing a new 807POSIX systems inherit file descriptors by default when exec'ing a new
807process. While perl itself laudably sets the close-on-exec flags on new 808process. While perl itself laudably sets the close-on-exec flags on new
808file handles, most C libraries don't care, and even if all cared, it's 809file handles, most C libraries don't care, and even if all cared, it's
809often not possible to set the flag in a race-free manner. 810often not possible to set the flag in a race-free manner.
829libraries or the code that leaks those file descriptors. 830libraries or the code that leaks those file descriptors.
830 831
831Fortunately, most of these leaked descriptors do no harm, other than 832Fortunately, most of these leaked descriptors do no harm, other than
832sitting on some resources. 833sitting on some resources.
833 834
834=item "leaked" file descriptors for fork'ed processes 835=item leaked file descriptors for fork'ed processes
835 836
836Normally, L<AnyEvent::Fork> does start new processes by exec'ing them, 837Normally, L<AnyEvent::Fork> does start new processes by exec'ing them,
837which closes file descriptors not marked for being inherited. 838which closes file descriptors not marked for being inherited.
838 839
839However, L<AnyEvent::Fork::Early> and L<AnyEvent::Fork::Template> offer 840However, L<AnyEvent::Fork::Early> and L<AnyEvent::Fork::Template> offer
880to make it so, mostly due to the bloody broken perl that nobody seems to 881to make it so, mostly due to the bloody broken perl that nobody seems to
881care about. The fork emulation is a bad joke - I have yet to see something 882care about. The fork emulation is a bad joke - I have yet to see something
882useful that you can do with it without running into memory corruption 883useful that you can do with it without running into memory corruption
883issues or other braindamage. Hrrrr. 884issues or other braindamage. Hrrrr.
884 885
885Cygwin perl is not supported at the moment, as it should implement fd 886Cygwin perl is not supported at the moment due to some hilarious
886passing, but doesn't, and rolling my own is hard, as cygwin doesn't 887shortcomings of its API - see L<IO::FDPoll> for more details.
887support enough functionality to do it.
888 888
889=head1 SEE ALSO 889=head1 SEE ALSO
890 890
891L<AnyEvent::Fork::Early> (to avoid executing a perl interpreter), 891L<AnyEvent::Fork::Early> (to avoid executing a perl interpreter),
892L<AnyEvent::Fork::Template> (to create a process by forking the main 892L<AnyEvent::Fork::Template> (to create a process by forking the main

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines