Отладка CGI
Ответить на этот вопрос однозначно нельзя. Дело в том, что Perl
существенно отличается от PHP. Первый - довольно продвинутый и
мощный интерпретируемый язык, а второй создавался исключительно
для работы в вебе. Поэтому, когда кто-то Вам скажет, что PHP круче
Перла, пошлите его на три буквы. Эти языки сравнивают в неравных
условиях.
PHP легче - это факт. При запуске демона httpd (веб-сервер Апаче)
он сразу же подгружает интерпретатор. Поэтому при запросах к
скриптам нет бессмысленных и ресурсоемких загрузок процессора.
Скрипт сразу же идет на выполнение, поэтому и говорят, что PHP
очень шустрый. И хотя при использовании PHP тратится
дополнительная память (каждый потомок хватает модуль php), при
большом количестве обращений мы получаем выигрыш в
производительности.
Процесс выполнения Perl-скриптов в стандартном виде несколько
иной. При обращении к такому скрипту, Апаче загружает
интерпретатор, а тот выполняет код. При этом тратится довольно
много памяти. Не менее 2 мегабайт на каждый процесс. Обычно от 4
до 6 мегабайт. Выходит, что каждый раз при обращении к скрипту
сервер производит загрузку тяжелой программы - интерпретатора. Но
это не значит, что Перл-скрипты выполняются медленнее. Это значит,
что при работе с Perl сервер испытывает большую нагрузку.
При больших нагрузках получаем следующее: сервер, использующий PHP
легче справляется с запросами и может обработать больше клиентов.
В то время сервер с сайтами на Perl будет подтормаживать.
Ситуация легко разруливается следующим образом (mod_perl - убогий,
я о нем говорить не буду): на сервер с Perl ставится прекрасный
модуль fast_cgi (http://fastcgi.com). Он позволяет существенно
снять нагрузку с сервера за счет того, что после первого запуска
скрипт не выгружается из памяти, а ждет следующий запрос. При этом
скрипт будет работать столько, сколько нужно, оставаясь в памяти.
Никакой лишней нагрузки на ресурсы сервера. Та же идея, что лежит
в основе PHP.
Простые CGI-скрипты отличаются от FastCGI-скриптов всего
несколькими строчками да и структурой. Например, скрипт может при
первом запуске соединиться с MySQL и постоянно держать это
соединение. Для того, чтобы скрипт работал именно под управлением
FastCGI вызывается библиотека FCGI. Она легко ставится под Linux
или Unix.
#!/usr/bin/perl
use FCGI;
my $request = FCGI::Request();
…
Действия, выполняемые при инициализации
скрипта (например, коннект к БД)
…
while($request->Accept() >= 0)
{
…
Основные действия, которые должен выполнять скрипт
…
}
…
Действия при завершении (редко нужно)
…
При выполнении запросов скрипт как бы гоняется по циклу: ожидание
- обработка - ожидание - обработка. В реале (под Linux или Unix)
это спящий процесс, который находится в режиме Accept.
Если запросов очень много, то сервер может запустить еще копию
процесса. Это жрет некоторое количество памяти, но в целом
увеличивает производительность сервера и ведет к экономии
ресурсов.
Вывод напрашивается сам собой. Кому нравится Php, пусть использует
его и не обвиняют Perl. Связка Perl и FastCGI - лучший ответ на
такие обвинения. При сложных задачах PHP уступает Perl на стадии
выполнения кода, он выигрывает лишь в стадии загрузки. Но
использование FastCGI сводит на нет это преимущество. Так что
выбор между языками зависит от специфики задачи и уровня
разработчика. Perl сложен для новичков, но позволяет решать
огромный пласт задач помимо веб-направленных (например, работа в
фоновом режиме и обеспечение работы сайта). PHP легок в освоении и
удобен при создании разного рода веб-приложений.
Тестирование параллельного программного обеспечения представляет собой более
сложную задачу по сравнению с тестированием последовательной программы. Программист
должен знать о подводных камнях при тестировании параллельного кода, имеющихся
методологиях и инструментарии.
Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее
реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности,
достоинства и недостатки.