>> Клавиатура - это клиент?
> нет, клавиатура не имеет возможности вернуть ответ
Это как раз специфика "агента", который является не самостоятельным (оконечным) устройством, а промежуточным - в данном случае между компом и человеком.
>>> ведь клиенты генерят запросы (т.е. события), а сервер их испольняет (обрабатывает).
>> Не надо путать запрос с событием.
> тогда прошу обяснить разницу.
Нажатие клавиши - событие. Запуск программы (после того, как будет набрана команда) - запрос.
Приход IP-пакета - событие. В одной IP-пакете, входящем в TCP-сессию, м.б. много запросов или запрос может состоять из нескольких пакетов.
>> Фишка в том, что когда юзер вводит слово "cleardatabase",
>> терминал не понимает, что это - имя юзера, пароль или команда;
>> терминал просто пересылает это слово на хост,
>> где оно анализируется по одной из таблиц, хост знает какой
>> (имена юзеров, пароли и команды хранятся в разных таблицах).
> т.е. повторяется клиент-серверная структура - клиент отправляет
> серверу запрос, сервер обрабатывает его и выдает клиенту ответ.
> различается только смысловая нагрузка передаваемой информации.
Всё встаёт на свои места как только мы понимаем, что клиентом является не терминал, а мыслящая прокладка между стулом и клавиатурой. :-)
Я готов рассмотреть работу человека в модели "запрос-ответ" (Unix-консоль):
- машина выдаёт "login:", юзер вводит своё имя;
- машина выдаёт "Password:", юзер вводит пароль;
- машина выдаёт приглашение шелла, юзер вводит команду (итеративно);
- одной из команд является "exit", после чего всё повторяется с начала.
А вот терминал, отправив что-то хосту, вовсе не ожидает ответа. Так что и в модели "запрос-ответ" терминал является сервером.
>> Терминал не знает, что на нём отображают - HTML-страницу или Word.doc.
> ну и что?
> SQL+ тоже не знает, что он отображает - объем продаж за месяц или список сотрудников.
Поэтому и SQL+, и терминал являются серверами. Клиент - это тот, кто знает больше; поэтому он - клиент, а сервер - слуга (см.словарь), который знает только то, что необходимо для выполнение его работы.
>>> и неважно, как именно был вычислен ответ...
>> Очень важно, т.к. это сильно влияет на стоимость системы.
> стоимость истемы зависит от объема хранимых данных
> и требуемой производительности их обработки,
И очень сильно зависит от распределения нагрузки между компонентами системы, если система построена по принципу асимметричной мкльтипроцессорности. Например, очень важно правильно подобрать соотношение мощности центрального процессора и видеокарты, т.к. при дисбалансе один из компонентов будет простаивать в ожидании, пока второй выполнит свою часть работы. В распределённой сетевой системе часть обработки происходит централизованно (на сервере или хосте), а часть - распределённо (на клиентах или терминалах). Распределённую вычислительную мощность очень сложно перераспределять - клиент не может задействовать вычислительную мощность др.клиентов, которые в данный момент простаивают. Централизованная вычислительная мощность распределяется только между теми, кому она действительно нужна; но зато её очень сложно и дорого масштабировать - достаточно сравнить стоимость N машин с многопроцессорной машиной, имеющей N (или хотя бы sqrt(N)) процессоров по мере роста N за сотню.
> а какова будет смысловая нагрузка этих данных и алгоритмы их обработки - решать человеку.
Какому человеку? При файловом доступе к базам данных сколько бы программист ни извращался, тормохом будет именно тохнология; и никакой оптимизацией кода это не устранишь. Так что неправильная технология может удорожить систему на несколько порядков (или снизить производительность при прежней цене) по сравнению с правильной технологией.