Microsoft Research Papers
Fun fact: you can share memory between distinct processes, by any of several means. Which is but one of the many reasons you shouldn't build a gigantic monolithic application server in the first place.
Also, I'm not suggesting spinning off a separate process to handle each request (the xinetd model); just splitting up the workload into separate processes doing different aspects of the job. The Unix system philosophy is like the Westminster system of government.
Take any one part of it in isolation, and it looks obviously silly; incautiously import ideas from another system and everything falls apart.
But the whole thing, when put together and kept intact, thrums along beautifully and achieves world domination.
My principal research projects are currently on sphere packing, energy minimization, and fast matrix multiplication.
I've listed my teaching activities on a separate page. Before that, I was an undergraduate mathematics major at MIT (in the class of 1995).
I was in the theory group at Microsoft Research from 2000 to 2007: I came as a postdoc and became a long-term member of the group a year later.
Your "large amount of cached data" could have been stored in memory allocated with mmap(MAP_PRIVATE | MAP_ANON), instead of regular malloc(), and then it wouldn't show up in the child after fork(). Typically you have a server that runs some kind of service.
There doesn't need to be any RPC involved, the data-cruncher can & should be a child process forked from the driver. It's a single process - it makes sharing data between requests very easy.