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/