Именно так работают GNU / Linux и другие многозадачные системы, они разделяют процессор между запущенными процессами, dot
не будут иметь 99%, но 100% в течение 99% времени. Каждый процесс доминирует над процессором в течение определенного периода времени.
Это выполняется планировщиками (в linux есть несколько планировщиков, некоторые просто используют обычную стратегию, некоторые стараются уделять больше времени пользовательским интерфейсам и т. Д.).
Теперь, в вашем случае, проблема заключалась в том, что, вероятно, dot
потребовалось не много процессорного времени, а много памяти. И когда программа использует слишком много памяти, происходит перебивание , которое является именно процессом, который заставляет систему зависать не потому, что dot
делает много, а потому, что ядру приходится перемещать страницы памяти назад и вперед между дисками (раздел подкачки) и системная память.
Даже если бы dot
просто потребовалось 99% процессорного времени, шансы на то, что переход на текстовый терминал был бы почти мгновенным, происходит из-за того, что ядро должно перемещать данные dot
из памяти, чтобы оно могло X
вернуться в память, чтобы X
видеть ключи вы просто нажимаете и переходите к текстовому терминалу, затем ядро должно X
выйти из памяти, для dot
которой все еще выполняется, а затем также выйти dot
, чтобы переместить процессы текстового терминала (возможно, просто login
?) обратно в память. (Если это выглядит грязно, это не только потому, что пример грязный - реальность такая грязная.)
Например, если вы войдете в текстовый терминал, вы сможете просто нажимать клавиши, нажимать клавишу Backspace, и это с радостью произойдет в режиме реального времени, но если вы сделаете что-то столь же простое, как запуск небольшого инструмента, такого как ps
, он «зависнет» «на какое-то время, потому что он должен освободить память для загрузки ps
(и он также должен ждать в очереди дискового ввода-вывода, которая активно используется для перемещения данных в память и из нее, пока он не сможет запросить ps
у файловой системы) ,