Attention perl maintainer: pp_system () implemented via do_aspawn () faster ?
Hello, The cygwin subdir in the perl source tree contains a set a functions named do_*spawn () which are based on the Cygwin spawnvp () call. That is presumably faster when all the parent wants to do is just start a new process that in unix would be accomplished by a call to fork () followed by exec (). Having in mind that fork is quite heavy in Cygwin would it make sense to force pp_system () to be implemented via the do_*spawn () instead of fork () + exec (). The can be done by defining HAS_FORK && !defined (__CYGWIN__) in pp_system (). Btw this is what Cygwin does in its system () call. Has anyone tested if this solution does really speed up the pp_system () call ? I did some lame tests and they show improvent but the gain doesnt seem to be so big and that is why I wonder. The test was basicaly to use MC to copy a certain number a files out of a zip file into the file system. For each file MC does a system () which invokes a perl script, which then invokes via perl's system () the unzip program. I've modified MC's system () to use Cygwin's system() instead of fork () + exec () and perl () to use pp_system () based on do_*spawn () but the gain is not so big really. So maybe the perl startup is much heavier than a fork and this makes the switch to spawnvp () quite invisible ?! Pavel -- COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test -- 1. GMX TopMail - Platz 1 und Testsieger! 2. GMX ProMail - Platz 2 und Preis-Qualitätssieger! 3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post
Re: Attention perl maintainer: pp_system () implemented via do_aspawn () faster ?
On Thu, Aug 07, 2003 at 04:07:39PM +0200, Pavel Tsekov wrote: >Hello, > >The cygwin subdir in the perl source tree contains a set a functions named >do_*spawn () which are based on the Cygwin spawnvp () call. That is >presumably faster when all the parent wants to do is just start a new >process that in unix would be accomplished by a call to fork () >followed by exec (). Having in mind that fork is quite heavy in Cygwin >would it make sense to force pp_system () to be implemented via >the do_*spawn () instead of fork () + exec (). The can be done >by defining HAS_FORK && !defined (__CYGWIN__) in pp_system (). >Btw this is what Cygwin does in its system () call. FWIW, you can get almost the same speedup by using vfork/exec in cygwin. cgf
Re: Attention perl maintainer: pp_system () implemented via do_aspawn () faster ?
Christopher Faylor wrote: >>The cygwin subdir in the perl source tree contains a set a functions named >>do_*spawn () which are based on the Cygwin spawnvp () call. That is >>presumably faster when all the parent wants to do is just start a new >>process that in unix would be accomplished by a call to fork () >>followed by exec (). Having in mind that fork is quite heavy in Cygwin >>would it make sense to force pp_system () to be implemented via >>the do_*spawn () instead of fork () + exec (). The can be done >>by defining HAS_FORK && !defined (__CYGWIN__) in pp_system (). >>Btw this is what Cygwin does in its system () call. > >FWIW, you can get almost the same speedup by using vfork/exec in cygwin. Yep, but from what I understand Perl 5.8 removed the usage of vfork (). So this why is I suggested the solution via spawnvp () which is already there. Pavel -- COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test -- 1. GMX TopMail - Platz 1 und Testsieger! 2. GMX ProMail - Platz 2 und Preis-Qualitätssieger! 3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post