Я бы, вероятно, выбрал что-то вроде JSON-RPC и обменивался бы данными через локальные сокеты или именованные каналы.
Общая память быстрее, но сложнее разобраться, если вам нужно сделатьэто самостоятельно (это подразумевает параллелизм и блокировку, которых, IMO, следует избегать, если это возможно.)
Это зависит от размеров сообщений и требований к задержке.И вы всегда можете попробовать механизм IPC, который может работать над разделяемой памятью, как упоминает Влад в комментарии ниже.
(Обратите внимание, что наличие системы IPC, которая может использовать каналы / сокеты, может быть хорошимвещь, на случай, если вам понадобится кластеризовать вашу систему в будущем).