Потоки - одна из наименее понятных областей программирования. Основные причины возникающих сложностей заключаются как в большом количестве технических устройств, с которыми взаимодействуют потоки, так и в разнообразии программного обеспечения.
Операция ввода-вывода информации - одна из самых сложных областей любого языка. Это тесно связано, как было выше сказано, с операционной системой и с оборудованием, которое используется. Для обеспечения нормальной работы необходимо поддерживать обмен данными, как минимум, с несколькими устройствами одновременно: дисководом, клавиатурой, мышкой, сканером, монитором, принтером и так далее.
Большим достижением стала система ввода-вывода, принятая в ANSI C. В этой системе для всех устройств использован подход стандартизации. Все устройства представлены в виде стандартных файлов ввода-вывода. Это дало возможность единообразно работать с устройствами через такие понятия как файл, указатель и дескриптор файла. Элегантность этого метода заключается также в легкости перенаправления потока и возможность организации конвейера. Программисту достаточно указать имя устройства или имя файла, что одно и тоже, и получить ожидаемый результат.
Вот, например, список зарезервированных имен:
COMx - последовательный порт
LPTx - порт принтера
PRN - порт принтера
AUX - дополнительный порт
CON - устройство консоли
В свое время обращение к устройствам как к файлам было новинкой. Но появились новые тенденции: объектно-ориентированное программирование, Интернет. Языки программирования, использующие объектно-ориентированный подход пытаются проделать ревизию существовавшего метода и приблизить его к объектно-ориентированному программированию. Ввести понятия классы потоков и на этой базе добиться большей функциональности работы с потоками.
Это вытекает из самой природы прикладного программирования: основной задачей является ввод-вывод информации, а уже затем ее обработка и хранение. На форматирование потока и ввод-вывод тратятся самые большие усилия и время, как программиста, так и конечного пользователя. О конечном пользователе тоже нельзя забывать.
Но в программировании развиваются технологии, которые принёс с собой Интернет. Эти технологии строятся на системе клиент-сервер, гипертекстовой разметки страниц и так далее. С этой позиции, позиции интернет технологий, хотелось бы рассмотреть подходы к программированию.
Во-первых, Интернет дал нам новый пользовательский интерфейс, платформно-независимый, до совершенства отработанный.
Во вторых, решен вопрос доступа к информации по принципу "отовсюду и в любое время".
На некоторых конкретных примерах рассмотрим, как этим можно воспользоваться. Меня, как программиста и разработчика, прежде всего, интересуют системы управления базами данных (СУБД), особенно .
Раньше, в каждой такой системе необходимо было решать вопрос функциональности разрабатываемого приложения (бизнес правил) и пользовательского интерфейса. Вопрос с пользовательским интерфейсом значительно осложнился с появлением графики. Оконный интерфейс поставил перед СУБД вопрос об использовании дополнительных сложных библиотек.
Часто эта проблема оставалась недостаточно или вообще неразрешимой. Интернет технологии в этом случае здорово выручают, беря на себя вопросы формирования пользовательского интерфейса на высшем уровне, оставляя для СУБД те задачи, для которых она предназначена и делает лучше всего - управление данными.
За счет чего можно этого достичь?
Технология сервер-клиент Интернет подразумевает то, что запускаются две программы. Одна программа сервер. Другая программа клиент. Эти программы запускаются независимо, но работают согласовано. Клиент посылает запрос к серверу. Клиентов может быть множество. Сервер обрабатывает запрос или запросы. Соответственно запросу выдает блок информации. Блок информации содержит данные и разметку этих данных, то есть как отобразить эти данные на экране. Клиент принимает блок информации. Выводит данные на экран согласно правилам, заложенным в разметке для этого блока.
Из этой схемы видно, что СУБД работает на сервере, помогает формировать комплексный информационный блок. В качестве WEB сервера может использоваться любой сервер:
Apache
WebSite
HS_HTTP
IxWEB
В качестве клиента может использоваться любой Internet Browser:
Netscape
Explorer
Mozilla
Что происходит на стороне сервера? Любой из вышеперечисленных серверов имеет механизм запуска скриптов и перехвата потока вывода скрипта на себя.
Вот мы и вернулись к вводу-выводу. В системе ANSI C эта функция называется STDIO. В системе FoxPro и CLIPPER, которые работают с реляционными таблицами типа *.DBF, для вывода информации существует функция outstd(a1,a2,...). В системе PHP и Perl для вывода предназначены функции echo(); и print();
Как видим, например, для СУБД FoxPro и CLIPPER теперь достаточно одной стандартной функции вывода, чтобы решить все вопросы, связанные с формированием пользовательского интерфейса. В одном потоке мы выдаем одновременно и данные и разметку данных для программы клиента. В нашем случае становится очевидным, что целесообразно разметку хранить в базе и формировать динамические страницы.
Скорость выполнения таких запросов и формирования динамических страниц очень хорошая.
Исполняемый модуль имеет небольшой конечный размер, может быть скомпилирован для любой операционной системы, и не изменяться на протяжении всего жизненного цикла.
Пример работы скриптов и скрипты можно найти на сайте http://ixbase.insyg.kiev.ua