On 2010-02-12 18:08:09 -0500, "Robert Jacques" <sandf...@jhu.edu> said:

On Wed, 10 Feb 2010 09:51:37 -0500, Leandro Lucarella <llu...@gmail.com> wrote:

There is a very simple concurrent GC model using fork()[1]. This is Unix  only
though (and very dependent on how efficiently fork() is implemented in  the
OS). I'm working (very slowly :) on implementing a GC based on this
algorithm.

No races, almost no synchronization. If the OS uses COW when fork()ing (I
guess every modern OS does that), the only drawback is the copying of
changed pages.

[1] Nonintrusive Cloning Garbage Collector with Stock Operating System
    Support.
    http://www.cs.purdue.edu/homes/grr/snapshot-gc.ps


Cool. Hadn't thought of something so simple. I just watched a channel 9 blog (http://channel9.msdn.com/shows/Going%20Deep/Mark-Russinovich-Inside-Windows-7-Redux/) and about half-way through they talk about new process reflection capabilities in Windows 7, which are an extension of fork, which they've had for a while (for posix compatibility, etc). Also, the PAGE_WRITECOPY protection should also allow this to work on Windows, at a finer grain.

It looks cool indeed. I was a little wary for ill effects at first, so I attempted to insert an innocuous:

        if (fork() == 0) {
                sleep(1); // do mark and sweep and return the result to the 
parent process.
                exit(0);
        }

in a (single-threaded) Cocoa application. No ill effect found (as long as you don't forget the exit(0)). I wonder how it'd fly on Windows though, isn't process creation a little more heavyweight?

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to