On Wed, 8 Aug 2001, alex wrote:
> Я получаю данные для своего модуля от другой программы через SysV shared
>memory.
> В модуле с помощью ap_rwrite() отдаю все сразу клиенту, а затем отключаюсь от
> разделяемой памяти с помощью shmdt().
>
> При этом запрос недообрабатывается, а клиент ждет-не дождется резудьтата и
> говорить server down.
>
> Я проверил и выяснил, что, если между вызовом ap_rwrite() и shmdt() поставить
> задержку, то все работает. При размере выдаваемого контента около 30kB
>требуется
> ~50мс не меньше. Такое ощущение, будто ap_rwrite() работает не синхронно. Все
>это
> приводит к тормозам при большом количестве запросов и вообще как-то напрягает
> меня.
Сам ap_rwrite() работает синхронно. В том смысле, что всё что ему передали
он либо успешно всунет в ядро или в BUFF. Или вернёт ошибку.
Никаких partial writes. Если, конечно, сокет блокирующий.
А как делается вывод - сначала ap_send_http_header(), а потом
один ap_rwrite() ?
Тогда ситуация такая - хедер весь уходит в BUFF, а после ap_rwrite()
два куска отдаются ядру через writev() (если writev() поддерживается,
что сейчас почти везде).
А вот, что ядро делает с тем буферами, которые ему передали через
writev() - не знаю. OS depended.
> Есть ли выход?
Наверное, не надо детачить. Зачем всё время атачить/детачить ?
Игорь Сысоев
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =