Я работал над подобной системой несколько лет назад.Вот как я это сделал:
Шаг 1. Избавьтесь от ненужных хронометристов в отдельных темах.Для этого я использовал эту технику .Это важно сделать, потому что общая система обмена сообщениями ограничена скоростью ее частей.
Шаг 2. Эта часть - тяжелая работа, но она окупается.Для каждого потока выведите журнал с отметкой времени, показывающий, когда каждое сообщение было отправлено, получено и обработано.Затем объедините журналы в единую временную шкалу и изучите ее.То, что вы ищете, это: а) ненужные повторные передачи, например, из-за тайм-аутов, б) дополнительная задержка между моментом получения сообщения и его обработкой.Это может произойти, например, если у потока есть несколько сообщений в его входной очереди, некоторые из которых могут быть обработаны быстрее, чем другие.Имеет смысл сначала обработать их.
Возможно, вам придется переключаться между этими двумя.
Не ожидайте, что это будет легко.Некоторые программисты слишком хороши, чтобы возиться с такой грязной работой.Но вы можете быть приятно удивлены тем, как быстро вы можете заставить все это работать.