#11
|
|||
|
|||
Фидодевелопмент - давайте обсуждать тут, а не по .pr и .nextgen
Nil A написал(а) к Alexey Vissarionov в Jan 22 03:21:56 по местному времени:
Нello, Alexey! Sunday January 09 2022 09:18, from Alexey Vissarionov -> Nil A: NA>> Как пример, Libuv вообще делает асинхронными дисковые операции, NA>> которые на epoll() не повесишь, AV> С чего бы вдруг? Дескриптор - он в любом случае дескриптор, а что там AV> за ним - известно только ядру. epoll() под низом работает с poll(), а poll() не реализован для файлов файловой системы, т.е. открытые файлы (а не сокеты) всегда возвращают готовность, поэтому, например, O_NONBLOCK для файлов бесполезен. http://lxr.linux.no/linux+v5.14/fs/eventpoll.c#L2045 2045 / The target file descriptor must support poll / 2046 error = -EPERM; 2047 if (!filecanpoll(tf.file)) 2048 goto errortgtfput; Я нейтрально отношусь к продуктам компании 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 |