yms: (Default)
[personal profile] yms
Текст, который я заслал в рассылку farbugs для последующей корректировки и размещения на сайте Фара. Замечания-дополнения-исправления принимаются.


Почему Консоль,
или
О преимуществах консоли перед GUI.

1. Скорость.

Консоль менее прихотлива к системным ресурсам и менее тормозна. Графический интерфейс связан с системой виндовых сообщений, их обработчиками - оконными процедурами, постоянным созданием и уничтожением окон, рисованием на экране, фонтами, рисованием полосок, иконок и прочим тормозящим геморроем. Любая программа, написанная под GUI, содержит оконную процедуру, работающую в user mode, и не одну - для каждого окна она своя. Даже такая простая программа, как Notepad, содержит три окна - общее, edit control и status bar. Причём даже стандартный системный edit control имеет обработчик в юзер моде, а не протектед, хоть и находящийся в системной DLL, но принадлежащий процессу Notepad. Это значит, что _каждое_ событие, которое приходит в окно, вызывает переключение из защищённого режима в пользовательский и обратно. А во время работы программы (например, загрузки большого файла) окно просто не перерисовывается.

Если графическое окно, долго находившееся в фоне, всплывает, есть большая вероятность того, что код обработчиков событий находится в виртуальной памяти на диске, поэтому постепенная перерисовка окна занимает заметное время - на практике нередки раздражающие задержки в 1-2 секунды.

Консоль представляет собой одно-единственное примитивное окно (без дочерних), оконная процедура которого находится в ядре в защищённом режиме. (Насчёт защищённого режима, как выяснилось — ерунда, сам не знаю, откуда я это взял.) Его отрисовкой занимается winsrv.dll в системном процессе csrss.exe. Всё происходит безо всяких переключений режимов, к тому же у процесса csrss.exe высокий приоритет. Это особенно заметно при загруженном процессоре или интенсивной операции с диском. Консольное окно прорисовывается и во время загруженности работой программы, которая в нём запущена, и даже при полном её зависании.


2. Клавиши и мышь.

Интерфейс гуя стандартен, в том числе стандартно и назначение некоторых клавиш, которые в фаре используются "по-фаровски". Да, можно их переопределить, но гуй начнет диктовать свой стиль: вопли возмущенных гуевых пользователей заставят сделать дефолты по гуевому стандарту. Так, в Total Commander'е быстрый поиск навешен по умолчанию на Ctrl-Alt-буква вместо Alt-буква, фокус ввода должен быть или на панели, или в командной строке, для изменения ширины столбцов надо тянуться к мышке, и т.д. и т.п.


3. Вывод команд.

В гуевой оболочке вывод консольных команд или теряется, или попадает в отдельное окно, с которым надо возиться: специально создавать (тоже занимает время), по окончании или закрывать (теряется результат), или оставлять (и этим раздражать юзера, которому приходится закрывать его вручную).


4. Удалённая работа.

С консолью можно работать через телнет, клиент которого есть если не на всех, то на многих платформах. Для удалённой работы с GUI же требуется клиент Terminal Services. Он занимает гораздо большую полосу сетевого траффика, и количество платформ для его клиента явно меньше.


5. Дополнительные нюансы.

В консоли элементарно реализовывается грабилка экрана, которая в _любой_ момент возьмет вам кусок текста с _любого_ места экрана. В гуе это делается гораздо сложнее. Кроме того, в консоли грабилка работает при любых обстоятельствах и даже при зависании самой программы.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

yms: (Default)
Michael Yutsis

March 2022

S M T W T F S
  12 345
678910 1112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 24th, 2026 01:58 pm
Powered by Dreamwidth Studios