Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: оптимизация модуля: пер еполнения и блокировки
Начиная с того момента, как управление
перешло в мой модуль, мне надо
выполнять цикл вида
while (не отослали все) {
i = file_from_disk.read(buf, buf_size) (1)
write_to_response(buf, i) (2)
}
Строка (1) блокирует выполнение потока,
поскольку диск не обязан быть готов к
чтению. Этих чтений много (целый цикл).
Следоваельно, поток заблокируется
надолго. Как реализовать строку (2) (а
следовательно и весь цикл) - я не знаю.
Все примеры по написанию модулей, что я
видел, - тривиальны: выделяется буффер b,
цепочка для вывода out
b->pos = some_bytes; /* first position in memory of the data */
b->last = some_bytes + some_bytes_length; /* last position */
b->last_buf = 1; /* Это ведь просто пример.
Ограничимся тривиальным сценарием */
out.buf = b;
out.next = NULL; /* Это ведь просто пример.
Ограничимся тривиальным сценарием */
и все это хозяйство отдается дальше
return ngx_http_output_filter(r, &out);
Как из этого тривиального примера
получить реальный - непонятно.
Может я туплю - тогда уж сильно не
пинайте :)
Posted at Nginx Forum:
http://forum.nginx.org/read.php?21,218226,218382#msg-218382
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|