I think what he's trying to say is that silver bullets don't exist. Only pros and cons.
I'm specifically asking about caching.
Presumably he's talking about processor caches. A shared nothing means that every time you "context" switch to another "process" you're going to have to reload all your cache lines in the L1 D-cache.
In Erlang you have a "reduction count budget" of 2000 reductions. This is fairly low, less than 1ms of execution, but during that time you have exclusive use of a CPU. At the end of your budget, you might be preempted, or you might get another window. So you take a bit of a hit to cache, but it's not like you are infinitely context switching. In practice it works fairly well.
Erlang process != OS process.
Processes can communicate. I reckon you could have a process that's responsible for managing the cache instead of managing a separate cache from each process.