vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-02-18 06:23 pm

Асинхронный линукс

Народ, кто-нибудь уже поимел опыт с <linux/io_uring.h>? Как оно по жизни?

Неожиданно для себя обнаружил, что в Линуксе пять лет назад появилась крутая фича. А именно три системных вызова, реализующих эффективный асинхронный интерфейс ко всем сервисам ядра.
  • int io_uring_setup(unsigned entries, struct io_uring_params *p);
  • int io_uring_enter(unsigned fd, unsigned to_submit, unsigned min_complete, unsigned flags, sigset_t *sig);
  • int io_uring_register(unsigned fd, unsigned opcode, void *arg, unsigned nr_args);
Революционная штука, как я погляжу. Может коренным образом изменить подход к разработке приложений. Только сложновато для программиста выходит. Есть статьи про это дело.

[personal profile] dedekha 2025-02-19 01:13 pm (UTC)(link)
Все это очень хорошо и действительно решает проблемы однако очень быстро ведет к сложным fsm. A по моим ненаучным но долгосрочным наблюдениям сложные fsm недоступны среднему программисту. Интересно может ли помочь ИИ?

[personal profile] dedekha 2025-02-20 12:23 am (UTC)(link)
Дело в аппликации. Никто не сможет справиться матрицей 1000x1000 state/event если у большинства проблемы с 10x10.

https://www.google.com/search?q=state+explosion+problem&oq=state+expl&gs_lcrp=EgRlZGdlKgcIAhAAGIAEMgYIABBFGDkyBwgBEAAYgAQyBwgCEAAYgAQyBwgDEAAYgAQyBwgEEAAYgAQyBwgFEAAYgAQyBwgGEAAYgAQyBwgHEAAYgAQyBwgIEAAYgATSAQg5NDkzajBqMagCALACAQ&sourceid=chrome&ie=UTF-8

[personal profile] ichthuss 2025-02-20 08:22 am (UTC)(link)
В общем-то, теоретически ничто не мешает компилятору преобразовать код, написанній как для тредов, в код, написанній для асинка. Просто одна длинная процедура разбивается на куски-колбєки. Другое дело, подходят ли для єтого распространенніе язіки. Вроде бі концептуально Єрланг для чего-то подобного создавался, может, подойдет, но не уверен - сам не пробовал.

[personal profile] dedekha 2025-02-20 12:46 pm (UTC)(link)
В синхроном коде можно иметь 1000 кусков типа: послать сообщение, ждать ответа, обработать ответ (*).

При прямом конвертировании в асинхронный код каждый такой кусок добавляет один state и один event к общей матрице.

(*) Простота и наглядность такого кода одна из главных причин почему люди мучаются с много-поточностью.