Though I suppose if you have zillions of users you might not want to be using up your memory making Arc instances for each one.
There's no benefit to having more Arc instances than you have CPU's, at least in terms of using all your CPU's.
So you might assign each user to one of four Arc instances.
Having a particular user always go to one Arc instance is useful since you don't lose your in-memory data structures like fnid's for that user.
For communicating between Arc instances you don't have to use JSON, though you certainly could, you could use Arc's read and write to be communicating with Arc data instead.
It probably doesn't make a big difference either way.
I haven't done any testing along these lines, so I don't know what the actual answer is, but I don't think adding more Arc instances than you have CPU's would do anything except use up more memory...
edit: though I suppose it's possible that garbage collection times might not scale linearly... if it takes more than twice as long for the garbage collector to run on twice as much data, then a larger number of smaller processes might give you some kind of performance benefit.