April 26th, 2020

Hello computer!

чего ждут программы?

Прочитал на одном известном ресурсе "задолбашку", мол бесит когда программы тормозят на простых действиях, и дальше стандартные слова про миллиарды операций в секунду, и "куда их в принципе можно потратить". Меня тормозящие программы, конечно, не радуют, но куда можно без толку "ухнуть" миллиарды операций я представить могу - это результат "наслоения абстракций": когда несколько десятилетий программисты каждые пару лет писали "новый слой абстракций поверх предыдущего", как-то так и получается.

Не могу понять я другой иногда встречающейся ситуации.
Вот программа, и она тормозит - уже довольно долго делает что-то, не требующее вмешательства пользователя. При этом значительную часть времени процессор не загружен (ни даже на четверть ядра, я понимаю что большинство программ до сих пор однопоточные и более одного ядра загрузить не могут), дисковой активности нет или её мало, сетевой активности не предполагается... но _что же она тогда делает_?
Ведь программа может либо "работать" (выполнять код), загружая при этом процессор, либо "ждать" внешнего события (ввода-вывода, освобождения ресурса). Пользователя она не ждёт, дискового ввода-вывода нет, сетевого тоже, если предположить что она ждёт какой-то ресурс - то в этот момент должен работать (занимать процессор или i/o) текущий владелец ресурса... но чего-то же она ждёт. Чего???