I would not have chosen threads. The team who designed the application stress tested it (with no crashes) -- then went on holiday. When it ran up on a very large customer multi-processor box it started crashing intermittently and I was asked to investigate.
I suppose a non-threaded solution is an option, but, given the size of the system (and my lack of tuits) it won't happen quickly. Anyway, the good news is that by replacing the closures, I've got the crashes to go away. I've also got them to go away by crudely hacking Dave Mitchell's closure patch (Change 23433 by davem on 2004/10/29 21:04:17) into our Windows build (this patch is not in Perl 5.8.x yet because it breaks the Windoze build -- see "Smoke [5.9.2] 23450" thread on p5p). Update: Dave's patch has been fixed for Win32 by change 23499.