Вы можете привязать свою программу к одному ядру, используя, schedutils
как описано в этой статье о Cyberciti :
sudo apt-get install schedutils
sudo taskset -c 3 -p 13545 # Lock PID 13545 to core 3
Другие процессы все еще могут быть запланированы на том же ядре, хотя. Итак, второе, что нужно сделать, это убедиться, что ваша команда выполняется с наивысшим приоритетом, используя команду nice (это скажет ядру Linux, что другие процессы должны быть прерваны при необходимости). Запустите вашу программу следующим образом:
nice -n -20 your-program
Есть и другие возможные причины проблем с синхронизацией. Это не так просто сделать:
- Если вы программируете на Python, существует сборщик мусора, который иногда останавливает вашу программу, чтобы освободить неиспользуемую память.
- Прерывания заставляют процессор обрабатывать что-то еще, чем вы хотите. Например, сетевые пакеты или другой ввод / вывод.
- Если ваша программа много спит, возможно, существуют другие процессы, которые заполняют кэш процессора (кэш L1 / L2). Это заставляет вас ждать доступа к ОЗУ.
- Еще хуже, если ваша RAM заполнена, так что ваш процесс выгружается на диск, потому что SD-карты работают медленно.
Есть способы сделать ваш процесс в реальном времени , а это значит, что он будет работать с определенными временными гарантиями. Проблема в том, что все остальное может быть медленнее, и это сложная тема. Если вы хотите пройти через эту кроличью нору, я предлагаю вам начать изучать процессы в реальном времени в Linux .