Ось так працюють GNU / Linux та інші багатозадачні системи, вони поділяють процесор між запущеними процесами, dot
не матимуть 99%, але 100% протягом 99% часу. Кожен процес домінує над процесором протягом певного періоду часу.
Цим займаються планувальники (у Linux є кілька планувальників, деякі просто використовують звичайну стратегію, деякі намагаються приділити більше часу користувальницьким інтерфейсам тощо).
Тепер у вашому випадку проблема, ймовірно, dot
полягала в тому, що це не забирало багато процесорного часу, але багато пам’яті. І коли програма використовує занадто багато пам'яті, відбувається обмолот , що є саме процесом, який змушує систему замерзати не тому dot
, що робить багато, а тому, що ядро має переміщати сторінки пам’яті туди-сюди між диском (swap-розділ) і системну пам'ять.
Навіть якщо dot
99% процесорного часу просто займає 99%, ймовірно, що зміна на текстовий термінал буде майже негайною, що трапляється, що ядро має перемістити dot
речі з пам'яті, щоб воно могло X
повернутись у пам'ять, щоб X
побачити ключі Ви просто натискаєте та переходите до текстового терміналу, тоді ядро має переміститися X
з пам'яті, для dot
якої все ще працює, а потім також переміститися dot
, щоб перемістити текстові термінальні процеси (можливо просто login
?) назад у пам'ять. (Якщо це виглядає безладним, це не лише тому, що приклад безладний - реальність така безладна.)
Наприклад, якщо ви увійдете в текстовий термінал, ви можете просто натиснути клавіші, натиснути зворотну простір, і це щасливо станеться в реальному часі, але якщо ви зробите щось таке просте, як запуск невеликого інструменту, як-от ps
, він "застигне" "деякий час, тому що він повинен звільнити пам'ять для завантаження ps
(а також доводиться чекати в дисковій черзі вводу / виводу, яка активно використовується для переміщення даних в пам'ять і з неї, поки вона не зможе запитувати ps
файлову систему) .