리눅스 비동기 I/O의 진화: epoll과 io_uring의 구조적 차이와 성능 최적화

epoll은 I/O 준비 상태를 알리는 모델로, 데이터 처리를 위해 매번 별도 시스템 콜을 호출해야 하는 구조적 오버헤드가 있다.

🔗 원문 보기

🐢 Ah, yes, the classic saga of a teacher overestimating the sophistication of a 'super simple' project. Spoiler alert: #epoll and #io_uring are the new hotness for transforming your glorified classroom assignment into the snail-paced wonder it was always meant to be! 🐌✨
https://sibexi.co/posts/epoll-vs-io_uring/ #teacherfails #classroomhumor #projectmanagement #techsaga #HackerNews #ngated
epoll vs io_uring in Linux | The sibexico databank

epoll vs io_uring in Linux | The sibexico databank

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!

srilyk - Twitch

srilyk streams live on Twitch! Check out their videos, sign up to chat, and join their community.

Twitch

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

COM-порт из ничего: PTY, epoll и немного RS485-боли

Мне понадобился последовательный порт, которого не было физически. Точнее — порт был нужен софту, который я писал и тестировал, а паять переходник и держать на столе плату ради пары проверок не...

Хабр

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

io_uring без розовых очков: 5 граблей, которые сожгли мне неделю, и где он реально быстрее epoll

Прод. Сервис на 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

Когда на Rust уже всё переписали

Мем про переписывание всего на Rust в итоге стал индустриальным стандартом. Безопасность памяти и строгий компилятор реально решают кучу проблем. Но на практике регулярно всплывают задачи, где...

Хабр
Ah, the classic tale of reinventing the wheel 🛞! Behold, the famed network server pattern, dear reader: marvel as it twiddles its thumbs for an event, then dispatches like a waiter at a Michelin-star restaurant 🍽️. Forget progress, let's wrap "epoll" and "kqueue" in redundant libraries and call it #innovation. 🚀
https://geocar.sdf1.org/fast-servers.html #reinventingthewheel #networkserver #epoll #kqueue #softwaredevelopment #HackerNews #ngated
fast-servers

Событийный цикл в asyncio: как Python-код работает поверх механизмов Linux

Большая статья для тех, кто, как и я, споткнулся об asyncio и так не разгадал до конца "магию" событийного цикла. Попробовал распутать этот клубок через подробный рассказ (в как можно более доступной форме) о внутренних механизмах Линукса и самого asyncio, которые лежат в основе событийного. К концу статьи, надеюсь, магия исчезнет, а останется ясное понимание фундамента. Погружаемся

https://habr.com/ru/articles/995032/

#asyncio #python #epoll #selectors #асинхронность #event_loop #eventloop #linux #сокеты

Событийный цикл в asyncio: как Python-код работает поверх механизмов Linux

Статья для тех, кто, как и я, споткнулся об asyncio и так и не понял его до конца. Введение Моё знакомство с asyncio началось довольно типично и болезненно. На тот момент я уверенно владел базовым...

Хабр

Как я пытался внедрить IOCP в libcoro, выгорел на полгода, но вернулся с планом «Б»

Что делать, если в твоём очередном самописном движке внезапно понадобилась сеть, да ещё и на корутинах из C++ 20, а подходящая библиотека не поддерживает Windows? Правильно - лезть под капот, разбираться что такое epoll , почему он несовместим с IOCP, затем вкатиться в Open Source, сделав огромный PR, выгореть на полгода, чтобы потом вернуться и начать делать нормально. Небольшая история о том, почему первый PR не должен быть огромным и как (не) нужно переписывать сетевую библиотеку.

https://habr.com/ru/articles/993666/

#c++20 #корутины #асинхронный_вводвывод #epoll #iocp #кроссплатформенность

Как я пытался внедрить IOCP в libcoro, выгорел на полгода, но вернулся с планом «Б»

Всё началось с того, что я захотел добавить поддержку сети в свой очередной новоиспечённый игровой движок №42. Вот есть такая мания: писать игровой движок, не сделать ни одной игры, но начать делать...

Хабр