Недавно я сравнил две версии моего приложения C ++, которое обрабатывает огромные файлы (десятки ГБ): обычный исполняемый файл и двоичный файл fastcgi, порождаемый под сервером lighttpd. Оказалось, что версия fastcgi была почти в 5 раз медленнее. Программа в основном читает много строк из файлов на диске через дескрипторы FILE, версия fcgi точно так же. Так откуда же пришло замедление?
Спасибо за комментарии! Моя программа делает следующее:
Инициализация:
- читает несколько файлов, открытых fopen (), построчно, используя fgets (файл содержит несколько миллионов строк)
- строит некоторую структуру данных в оперативной памяти при обработке файлов
- выводит небольшие сообщения журнала в файл на диске после обработки каждого файла
Диалог:
- остальное время отвечает на поисковые запросы через stdin / stdout
И версия FCGI:
FCGX_Init ()
Инициализация (как в оригинальной версии)
while (FCGX_Accept ()) {
Диалог (через сокет fcgi вместо стандартного ввода / вывода)
}
И я говорю только о выполнении части инициализации.
Я надеюсь, что сейчас достаточно информации.