Я не использовал MPI, но довольно часто использовал сокеты. Есть несколько вещей, которые следует учитывать при использовании высокопроизводительных сокетов. Вы делаете много маленьких пакетов или больших пакетов? Если вы делаете много небольших пакетов, рассмотрите возможность отключения алгоритма Nagle для более быстрого ответа:
setsockopt (m_socket, IPPROTO_TCP, TCP_NODELAY, ...);
Кроме того, использование сигналов на самом деле может быть намного медленнее при попытке пропустить большой объем данных. Давным-давно я создал тестовую программу, в которой читатель ожидал сигнала и считывал пакет - он получал около 100 пакетов в секунду. Затем я просто заблокировал чтение и получил 10000 операций чтения / сек.
Смысл в том, чтобы взглянуть на все эти опции и проверить их. Различные условия сделают разные техники быстрее / медленнее. Важно не просто получать мнения, но и проверять их. Стив Магуайр говорит об этом в «Написание твердого кода». Он использует множество нелогичных примеров и тестирует их, чтобы выяснить, что делает код лучше / быстрее.