리눅스 비동기 I/O의 진화: epoll과 io_uring의 구조적 차이와 성능 최적화
epoll은 I/O 준비 상태를 알리는 모델로, 데이터 처리를 위해 매번 별도 시스템 콜을 호출해야 하는 구조적 오버헤드가 있다.
리눅스 비동기 I/O의 진화: epoll과 io_uring의 구조적 차이와 성능 최적화
epoll은 I/O 준비 상태를 알리는 모델로, 데이터 처리를 위해 매번 별도 시스템 콜을 호출해야 하는 구조적 오버헤드가 있다.
Epoll vs. Io_uring in Linux
https://sibexi.co/posts/epoll-vs-io_uring/
#HackerNews #Epoll #IoUring #Linux #Performance #Comparison #SystemProgramming
Heeeey #Python friends, it's that time again! Join me now for #ProgrammingIsMagic at https://www.twitch.tv/srilyk
Over the last several streams we spent a bunch of time exploring #sockets, #threading, #multiprocessing, #select, and #epoll
Now it's time to *actually* dig into #asyncio, the most popular choice from my polling.
boosts welcome!
COM-порт из ничего: PTY, epoll и немного RS485-боли
Демон «ничего не делал» — а одно ядро было загружено на 100%. История про виртуальный COM-порт для Linux/WSL2: PTY, epoll и эмуляция RS485, с кодом и граблями. Рассказываю, как сделал vseriald — демон, который создаёт виртуальный последовательный порт /dev/ttyV0 в Linux и WSL2 и выводит его в сеть, FIFO или очередь сообщений. Разбираю три неочевидных места: псевдотерминал, после закрытия которого одно ядро уходит в 100%; притормаживание источника в однопоточном epoll -цикле без блокировок; эмуляцию полудуплексного RS485 как конечного автомата с таймингами и коллизиями. Плюс честный ответ на вопрос «зачем это, если есть socat и /dev/pts» — и код из реального проекта.
https://habr.com/ru/articles/1044386/
#c++ #linux #pty #epoll #rs485 #последовательный_порт #systemd
io_uring без розовых очков: 5 граблей, которые сожгли мне неделю, и где он реально быстрее epoll
io_uring продавали как убийцу epoll. На деле на HTTP keep-alive разница 0-15%, иногда не в его пользу. Но на NVMe с queue depth 128 - в 3 раза быстрее. Честный разбор с бенчмарками, реальными граблями (SQPOLL, cancel race, partial recv) и почему Google отключил io_uring в ChromeOS.
https://habr.com/ru/articles/1039820/
#io_uring #epoll #asyncio #liburing #высокаянагрузка #ядроlinux #NVMe #tokiouring #glommio #syscall

Прод. Сервис на Go, 80k RPS, p99 latency 12 мс. Читаю Phoronix, новость: "io_uring быстрее epoll в 2-4 раза". Решаю переписать сетевую часть. Через неделю - откат в master. p99 не упал, а вырос до 18...
Когда на Rust уже всё переписали
Мем про переписывание всего на Rust в итоге стал индустриальным стандартом. Безопасность памяти и строгий компилятор реально решают кучу проблем. Но на практике регулярно всплывают задачи, где архитектурные рамки Раста только мешают и заставляют бороться с языком. Писать системные сетевые сервисы на C в 2026ом году можно, но CVE на переполнение буфера вам выпишут быстрее, чем вы допишете свой Makefile. Как говорится: Rust не позволит вам выстрелить себе в ногу. Zig позволит с радостью, но перед этим попросит явно передать аллокатор. В двух последних проектах, в разработке которых я участвую, был выбран Zig. Я не буду продавать язык как идеальный (он объективно сырой), но ниже будет разбор реального опыта.
https://habr.com/ru/articles/1022260/
#zig #rust #c #системное_программирование #управление_памятью #аллокаторы #epoll #comptime #telegram #mtproto
Событийный цикл в asyncio: как Python-код работает поверх механизмов Linux
Большая статья для тех, кто, как и я, споткнулся об asyncio и так не разгадал до конца "магию" событийного цикла. Попробовал распутать этот клубок через подробный рассказ (в как можно более доступной форме) о внутренних механизмах Линукса и самого asyncio, которые лежат в основе событийного. К концу статьи, надеюсь, магия исчезнет, а останется ясное понимание фундамента. Погружаемся
https://habr.com/ru/articles/995032/
#asyncio #python #epoll #selectors #асинхронность #event_loop #eventloop #linux #сокеты
Как я пытался внедрить IOCP в libcoro, выгорел на полгода, но вернулся с планом «Б»
Что делать, если в твоём очередном самописном движке внезапно понадобилась сеть, да ещё и на корутинах из C++ 20, а подходящая библиотека не поддерживает Windows? Правильно - лезть под капот, разбираться что такое epoll , почему он несовместим с IOCP, затем вкатиться в Open Source, сделав огромный PR, выгореть на полгода, чтобы потом вернуться и начать делать нормально. Небольшая история о том, почему первый PR не должен быть огромным и как (не) нужно переписывать сетевую библиотеку.
https://habr.com/ru/articles/993666/
#c++20 #корутины #асинхронный_вводвывод #epoll #iocp #кроссплатформенность