libuv использует внутреннюю блокировку вызовов файловой системы — почему? Как?

Я только что узнал, что жемчужина Node.js libuv использует систему блокировки вызывает файловые операции. Асинхронное поведение реализовано с помощью потоков! В связи с этим возникает два вопроса (меня только волнует Unix):

  1. Почему он не использует неблокирующие вызовы файловой системы, как это делается для сети?
  2. Если есть миллион ожидающих чтения файлов, он, вероятно, не запустит миллион потоков... Что делает libuv??

person Robert Siemer    schedule 17.11.2013    source источник
comment
Неблокирующий ввод-вывод не всегда может быть возможен или может иметь существенное значение. Читать remlab.net/op/nonblock.shtml   -  person user568109    schedule 17.11.2013


Ответы (2)


  1. Скорее всего, будут поддерживаться синхронные операции, такие как fs.renameSync() и fs.rename().

  2. #P2# <блочная цитата> #P3# #P4#

Кроме того, что касается шутки о «жемчужине короны»: Node.js и libuv — это не волшебство. Это хорошие инструменты в вашем распоряжении, но, безусловно, они имеют свои ограничения.

Тем не менее, преувеличение «один миллион прочитанных файлов» было бы натяжкой для любой платформы, чтобы управлять ею без ограничений.

person Jonathan Lonowski    schedule 17.11.2013
comment
1) Я не хотел включать операции rename(). Я имею в виду операции на основе файловых дескрипторов (т.е. то, что ядро ​​​​может делать без блокировки). 2) Таким образом, libuv не обрабатывает все операции одновременно. Нужно просто поместить первую группу в пул потоков, а остальные хранить в буфере FIFO? - person Robert Siemer; 18.11.2013

  1. Невозможно использовать тот же неблокирующий API, так как O_NONBLOCK и друзья не работают с обычными файлами! Для Linux доступен AIO, но он имеет свои особенности (т.е. зависит от файловой системы, отключает молчание для некоторых операций).

  2. Я понятия не имею.

person Robert Siemer    schedule 18.11.2013
comment
Да, O_NONBLOCK просто не работает с файлами с Linux, поэтому uv имитирует неблокирующее поведение с пулом потоков. - person Andrius Bentkus; 26.05.2014
comment
Итак, поскольку O_NONBLOCK не работает в Linux, Windows не имеет преимуществ перед API-интерфейсами неблокирующих файлов при использовании Node? Как насчет .Net Core? - person InsaneRabbit; 10.01.2020