Foundationপ্রথম নীতি থেকে
LEVEL 7 · Computer Networking

epoll

এপোল

Linux-এর scalable readiness notification API — হাজার হাজার idle socket-এর মধ্যে ready-গুলো O(ready) সময়ে দেয়।

C10K সমস্যা: connection হাজারে, active এক মুহূর্তে মাত্র কয়েকটা। Thread-per-connection অপচয়; select/poll প্রতি call-এ সব fd kernel-এ সরিয়ে আনে আর সব scan করে — O(n), connection বাড়লে খরচ বাড়ে।

epoll-এর মডেল — interest list একবার kernel-এ জমা থাকে; epoll_wait শুধু ready-গুলো ফেরত দেয়:

int ep = epoll_create1(0);
struct epoll_event ev = { .events = EPOLLIN, .data.fd = srv };
epoll_ctl(ep, EPOLL_CTL_ADD, srv, &ev);   // একবারই নিবন্ধন

struct epoll_event out[64];
int n = epoll_wait(ep, out, 64, -1);      // ready fds
for (int i = 0; i < n; i++) handle(out[i].data.fd);

Level vs edge trigger — LT-তে data থাকা পর্যন্ত বারবার জানায়; ET-তে edge-এ একবারই — non-blocking fd + buffer পুরো খাওয়ার শৃঙ্খলা লাগে, বদলে syscall কম।

nginx, redis, node-এর event loop — নিচে সবার এই জাতীয় mechanism; BSD/macOS-এ kqueue, Windows-এ IOCP সমপর্যায়ের।