Мне кажется, что швы 2 мс. Люди годами читали и писали в последовательные порты со скоростью 19200 бод (например, на 486 аппаратных средствах), не перегружая процессор. Возможно, ваш подход неверен.
Какой API вы используете для доступа к порту? Похоже, вы опрашиваете их, если API поддерживает заблокированные операции чтения и записи, это был бы гораздо лучший подход.
В таком случае проще всего поместить чтение и запись в их собственный поток и использовать блокировку чтения в цикле, тогда ваш поток будет занят только тогда, когда есть данные для чтения и вы обрабатываете их. Ваше приложение должно знать, когда ему нужно выполнить запись, поэтому правильный поток должен ожидать переменную условия, когда данные доступны, это условие запускается, вызывая поток записи.
Вероятно, существуют более простые однопоточные подходы к этому, поскольку я уверен, что первые приложения для чтения и записи на последовательных портах (например, модем x) не были многопоточными, но я их не знаю, но они должны быть задокументированы в API, который вы используете.