http://qs1969.pair.com?node_id=930862


in reply to Re^2: Win32, fork and XS globals
in thread Win32, fork and XS globals

For a very large proportion of uses of fork -- essentially all those using the 'fork & exec' idiom -- system, especially system 1, ... is a far more effective 'emulation'. The spawned process can (by default does) inherit many of the system resources -- open file, pipe and socket handles and the like -- that forked processes inherit under *nix.

But, as Corion correctly points out, there are limitations that prevent it from being a transparent solution to porting forking programs to Windows.

It is possible to provide a more realistic and efficient fork emulation on Windows -- one that uses real processes and even COW memory. Creating the new process and giving it COW access to the parents memory segments is relatively trivial. The difficult part is fixing up the perl internals within the spawned copy.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^4: Win32, fork and XS globals
by syphilis (Archbishop) on Oct 12, 2011 at 11:43 UTC
    But, as Corion correctly points out, there are limitations that prevent it from being a transparent solution to porting forking programs to Windows

    Yep - thanks Corion, Buk.

    By way of belated (and incomplete) explanation, I was led down this path by a PDL::Graphics::PLplot test script which does a couple of forks.
    That test script works fine on nix systems, but exhibits some odd behaviour and errors on Windows. Thing is, of course, that the plplot library sets some globals and is not thread safe - not an issue with fork() on nix, but, as I've finally managed to grasp, prone to error with fork() on windows ... simple as that !!

    Cheers,
    Rob
      prone to error with fork() on windows ... simple as that !!

      Indeed. I wish there was some way to estimate how many few instances of *nix forking code that work under Windows thanks to despite the fork emulation.

      It might then be possible to argue for its removal and that could only benefit threaded code, that is currently hamstrung by 'features' necessary for that emulation.

      It's way too late for that of course, but...


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.