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. Дополнительные нюансы.

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

Date: 2003-07-23 01:06 am (UTC)
From: [identity profile] yms.livejournal.com
Ну что значит "и так понятны"? Большинству как раз непонятны. Мне и самому не были понятны некоторые моменты до вчерашнего дня, когда я этот текст доводил до ума. Да и нам тоже очень полезно свести в один текст всё, что "и так понятно".

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 11:01 am
Powered by Dreamwidth Studios