Архитектура Nginx

Valery Kholodkov valery+nginxru at grid.net.ru
Sun Mar 15 19:47:00 MSK 2009


Alex Koshelev wrote:
> Почему именно файловый I/O блокируется? В современных ОС вполне можно
> сделать его не блокирующим, и отпускать воркер на то время пока ОС не
> заполнит буфер и не просигнализирует об этом. В чем в данной ситуации
> концептуальное различие между сетевым I/O?

Концептуальное различие между сетевым и дисковым I/O заключается в том, 
что в сетевом I/O имеем дело с потоками байт или пакетов, а в дисковом 
-- с пространством байт или блоков.

Насколько я помню, в рассылке про ядро Linux кто-то писал, что 
архитектура Unix не приспособлена для асинхронного дискового I/O, 
поскольку там есть два архитектураных уровня -- кэш и файловая система, 
в которых возможность выполнения операций асинхронно изначально не 
закладывали.

То есть, надо либо код этих двух уровней переписать наизнанку, либо 
использовать ядерные трэды.

Таким образом, сделать файловый I/O неблокирующимся нетривиально. 
Приходится использовать специальный API, который не в каждой ситуации 
реально асинхронный.

-- 
Regards,
Valery Kholodkov





More information about the nginx-ru mailing list