= Сообщение: 2054 из 2735 =================================== RU.FTN.DEVELOP = От : Nil A 2:5015/46 21 Jan 22 03:21:56 Кому : Alexey Vissarionov 21 Jan 22 03:21:56 Тема : Фидодевелопмент - давайте обсуждать тут, а не по .pr и .nextgen FGHI : area://RU.FTN.DEVELOP?msgid=2:5015/46+61ea125e На : area://RU.FTN.DEVELOP?msgid=2:5020/545+61da7e32 = Кодировка сообщения определена как: CP866 ================================== ============================================================================== Hello, Alexey!
Sunday January 09 2022 09:18, from Alexey Vissarionov -> Nil A:
NA>> Как пример, Libuv вообще делает асинхронными дисковые операции, NA>> которые на epoll() не повесишь, AV> С чего бы вдруг? Дескриптор - он в любом случае дескриптор, а что там AV> за ним - известно только ядру.
epoll() под низом работает с poll(), а poll() не реализован для файлов файловой системы, т.е. открытые файлы (а не сокеты) всегда возвращают готовность, поэтому, например, O_NONBLOCK для файлов бесполезен.
Я нейтрально отношусь к продуктам компании Facebook (Meta сейчас), но иногда они приносят общественную польщу в виде опенсорца. Например, в 2019 году ФБ отдал в ядро Линукса io_uring интерфейс, который как раз и создан решить проблему асинхронных (дисковых) операций. До этого в 2.6 добавили aio, но им никто не пользуется, потому что не удобно - надо открывать файлы с флагом O_DIRECT, а это отключает кэшь страниц, и надо передавать буфера выравнивать по границе памяти. До этого можно было только O_ASYNC флаг устанавливать и ловить сигналы - ещё хуже.
AV> Еще и треды... epoll тем и хорош, что все дескрипторы обрабатываются в AV> одном потоке.
Для сокетов и прочих eventfd - epoll рулит, но вот без обыкновенных (regular) файлов. Кстати, сначала в 2000м в BSD появился kqueue, а потом уже в 2002ом в линуксе epoll. Можно сказать "списали".
Best Regards, Nil --- GoldED+/LNX 1.1.5 * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)