Если использовать нативные библиотеки через JNI , это вариант, я бы рассмотрел реализацию IPC как обычно (поиск IPC, mmap, shm_open и т. Д.).
Существует много накладных расходов, связанных с использованием JNI, но, по крайней мере, это немного меньше, чем полные системные вызовы, необходимые для выполнения чего-либо с сокетами или каналами. Скорее всего, вы сможете сократить одностороннюю задержку до 3 микросекунд, используя реализацию IPC с общей памятью через JNI. (Обязательно используйте опцию -Xcomp JVM или настройте порог компиляции тоже; в противном случае ваши первые 10000 семплов будут ужасны. Это имеет большое значение.)
Я немного удивлен, что запись в сокет TCP занимает 50 микросекунд - большинство операционных систем в некоторой степени оптимизируют петлю TCP. Солярис на самом деле неплохо справляется с этим с помощью функции TCP Fusion . И если в была какая-либо оптимизация для обратной связи вообще, это обычно было для TCP. UDP имеет тенденцию пренебрегать - поэтому я бы не стал беспокоиться об этом в этом случае. Я также не стал бы беспокоиться о каналах (stdin / stdout или ваших собственных именованных каналах и т. Д.), Потому что они будут еще медленнее.
И, как правило, большая задержка, которую вы видите, связана с передачей сигналов - либо ожиданием селектора ввода-вывода, такого как select () в случае сокетов, либо ожиданием семафора, либо ожиданием чего-либо. Если вы хотите наименьшую возможную задержку, вам придется сжечь ядро в тесном цикле опроса новых данных.
Конечно, всегда есть коммерческий готовый маршрут - который, как я знаю, наверняка решит вашу проблему в спешке - но, конечно, он стоит денег. И в интересах полного раскрытия информации: я работаю для Informatica над их программным обеспечением для обмена сообщениями с низкой задержкой. (И мое честное мнение, как инженера, это то, что это довольно фантастическое программное обеспечение - безусловно, стоит проверить этот проект.)