Использовать темы для:
- абстрагируйте все ожидания ввода / вывода.
- назначить работу всем ядрам.
также удалите все состояния ожидания из основного потока.
Отложить все операции ввода-вывода для потока, чтобы в нем находились только состояния ожидания. Сохраняйте фактические вычисления в главном потоке и используйте механизмы синхронизации, которые заставляют поток ввода-вывода подчиняться для ожидания основного потока при обмене данными.
Если ваш ЦП является многоядерным, и ваша проблема паралеллизуема, создайте столько потоков, сколько у вас ядер, изучите функции «установки сродства», чтобы распределить их между ядрами и при этом сохранить отдельный поток для всех операций ввода-вывода.
Также обратите внимание, чтобы не ждать в вашем основном потоке - usleep (1) не отправляет вас в фоновый режим в течение 1 микросекунды, но для "не менее ...", и это может означать что-нибудь между 1 мс и 100 мс, но вряд ли все меньше этого и никогда не приближается к микросекунде.