Ãâó : http://www.linux.or.jp/JM/html/LDP_man-pages/man4/epoll.4.html
¹ø¿ª : 2005. 08. 11                 ÃÖÈï¹è ( jacking@korea.com )

 

 

 

 

EPOLL

Section: Linux Programmer's Manual (4)
Updated: 2002-10-23
Index JM Home Page roff page


 

À̸§

epoll - I/O À̺¥Æ® ÅëÁö ±â´É  

¼­½Ä

#include <sys/epoll.h>  

¼³¸í

epollÀº pollÀÇ ÀÏÁ¾À̸ç edge trigger ÀÎÅÍÆäÀ̽º ¶Ç´Â level trigger ÀÎÅÍÆäÀ̽º·Î¼­ »ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ°í °¨½ÃÇÏ´Â ÆÄÀÏ µð½ºÅ©¸³ÅÍÀÇ ¼ö°¡ ¸¹Àº °æ¿ì¿¡µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.  epoll ¼¼Æ®¸¦ ¼³Á¤Çϰųª Á¦¾îÇϰųª Çϱâ À§Çؼ­ ´ÙÀ½ÀÇ 3°³ÀÇ ½Ã½ºÅÛ ÄÝÀÌ Á¦°øµÇ°í ÀÖ´Ù: epoll_create, epoll_ctl, epoll_wait

epoll ¼¼Æ®´Â epoll_create À¸·Î ÀÛ¼ºµÇ´Â ÆÄÀÏ µð½ºÅ©¸³ÅÍ¿¡ Á¢¼ÓµÈ´Ù. ±×¸®°í ƯÁ¤ÀÇ ÆÄÀÏ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇÑ °ü½É (¿ªÁÖ: ¾î¶² À̺¥Æ®¸¦ °¨½ÃÇÒ±î µî)À» epoll_ctl ·Î µî·ÏÇÑ´Ù. ¸¶Áö¸·¿¡ epoll_wait ·Î ½ÇÁ¦ÀÇ À̺¥Æ® ´ë±â¸¦ °³½ÃÇÑ´Ù.

 

ÁÖÀÇ

epoll À̺¥Æ® ¹è¼Û (distribution) ÀÎÅÍÆäÀ̽º´Â edge trigger (ET) ¶ó°í ÇØµµ level trigger (LT) ¶ó°í ÇØµµ µ¿ÀÛ½Ãų ¼ö°¡ ÀÖ´Ù.  ET À̺¥Æ® ¹è¼Û ±â±¸¿Í LT À̺¥Æ® ¹è¼Û ±â±¸ÀÇ Â÷ÀÌ´Â ´ÙÀ½°ú °°ÀÌ ¼³¸íÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ½Ã³ª¸®¿À°¡ ÀϾ´Ù°í ÇÏÀÚ:

1

ÆÄÀÌÇÁÀÇ Àбâ ÃøÀ» ³ªÅ¸³»´Â ÆÄÀÏ µð½ºÅ©¸³ÅÍ (RFD) °¡ epoll µð¹ÙÀ̽ºÀÇ ³»ºÎ¿¡ Ãß°¡µÈ´Ù.

2

ÆÄÀÌÇÁ¿¡ ¾²±â¸¦ ÇÏ´Â ÇÁ·Î±×·¥ÀÌ 2Kb ÀÇ µ¥ÀÌÅ͸¦ ÆÄÀÌÇÁÀÇ ¾²±âÃø¿¡ ±âÀÔÇÑ´Ù.

3

epoll_wait ¸¦ È£ÃâÇϸé Àб⠰¡´É(ready)ÀÎ ÆÄÀÏ µð½ºÅ©¸³Åͷνá RFD°¡ µ¹¾Æ°£´Ù.

4

ÆÄÀÌÇÁ·ÎºÎÅÍ Àо´Â ÇÁ·Î±×·¥ÀÌ 1Kb ÀÇ µ¥ÀÌÅ͸¦ RFD·ÎºÎÅÍ Àо´Ù.

5

epoll_waitÀÇ È£ÃâÀ» ÇÑ´Ù.

RFD ÆÄÀÏ µð½ºÅ©¸³ÅͰ¡ EPOLLET Ç÷¡±×¸¦ »ç¿ëÇØ epoll Ãß°¡µÇ°í ÀÖÀ¸¸é ÀÌ¿ë °¡´ÉÇÑ µ¥ÀÌÅͰ¡ ÆÄÀÏ ÀÔ·Â ¹öÆÛ¿¡ ¾ÆÁ÷ Á¸ÀçÇØ ¸®¸ðÆ®ÀÇ Á¢¼Óó(peer)°¡ ÀÌ¹Ì º¸³»Áø µ¥ÀÌÅÍ¿¡ ±Ù°ÅÇØ ÀÀ´äÀ» ±â´ëÇϰí Àֱ⠶§¹®¿¡ ½ºÅÜ 5ÀÇ epoll_wait ÀÇ È£Ãâ·Î ÇàÇÒ °¡´É¼ºÀÌ ÀÖ´Ù.  À̰ÍÀº edge trigger À̺¥Æ® ¹è¼Û¿¡¼­´Â ¸ð´ÏÅÍ Çϰí ÀÖ´Â ÆÄÀÏ·Î À̺¥Æ®°¡ ¶°³µÀ» ¶§¿¡¸¸ À̺¥Æ®°¡ ¹è¼ÛµÇ±â ¶§¹®¿¡ ÀÖ´Ù. »ó±âÀÇ ¿¹¿¡¼­´Â 2·Î ÇàÇØÁø ¾²±â¿¡ ÀÇÇØ RFD ¿¡ °üÇÑ À̺¥Æ®°¡ »ý¼ºµÇ¾î 3·Î À̺¥Æ®°¡ ¼Òºñ (consume) µÈ´Ù.

4 ·Î ÇàÇØÁö´Â Àбâ Á¶ÀÛ¿¡¼­´Â ÀüºÎÀÇ ¹öÆÛ µ¥ÀÌÅ͸¦ ¼ÒºñÇÏÁö ¾Ê±â ¶§¹®¿¡ ½ºÅÜ 5 ¿¡¼­ ÇàÇØÁö´Â epoll_wait ÀÇ È£ÃâÀÌ ¹«±âÇÑÀ¸·Î Àá±ÛÁöµµ ¸ð¸¥´Ù.  EPOLLET Ç÷¡±× (edge trigger)¿Í ÇÔ²² »ç¿ëÇÏ´Â °æ¿ì  epoll ÀÎÅÍÆäÀ̽º´Â ºí·Ï ÇÏÁö ¾Ê´Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ »ç¿ëÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù. À̰ÍÀº ºí·Ï µÇ´Â Àб⳪ ±âÀÔ¿¡ ÀÇÇØ , º¹¼öÀÇ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ Ãë±ÞÇϴ ŽºÅ©¸¦ ±¾ÁÖ¸²(starve) ½ÃŰÁö ¾Ê°Ô Çϱâ À§ÇÑ °ÍÀÌ´Ù.   epoll ¸¦ edge trigger (EPOLLET) ÀÎÅÍÆäÀ̽º·Î¼­ »ç¿ëÇϱâ À§Çؼ­ Á¦¾ÈµÇ´Â ¹æ¹ýÀº ÀÌÇÏ¿Í °°°í ÈçÈ÷ ÀÖ´Â ÇÔÁ¤À» ÇÇÇÏ´Â ¹æ¹ýµµ °è¼ÓÇØ ¸»ÇÑ´Ù.

i

ºí·Ï ÇÏÁö ¾Ê´Â ÆÄÀÏ µð½ºÅ©¸³ÅÍ¿Í ÇÔ²² »ç¿ëÇÑ´Ù.

ii

read(2) ¶Ç´Â write(2) ÀÌ EAGAIN ¸¦ µ¹·ÁÁØ ´ÙÀ½¿¡¸¸ À̺¥Æ®¸¦ ±â´Ù¸°´Ù.

¹Ý´ë·Î level trigger ÀÎÅÍÆäÀ̽º·Î¼­ »ç¿ëÇÏ´Â °æ¿ì´Â epoll Àº Á¤¸»·Î º¸´Ù °í¼ÓÀÇ pollÀÌ¸ç »ç¿ë¹ýÀÌ °°¾Æ¼­ pollÀÌ »ç¿ëµÇ°í ÀÖ´Â °÷Àº ¾îµð¿¡¼­¶óµµ »ç¿ëÇÒ ¼ö°¡ ÀÖ´Ù. edge trigger¸¦ »ç¿ëÇßÀ» °æ¿ì¿¡¼­µµ º¹¼öÀÇ µ¥ÀÌÅ͸¦ ¼ö½ÅÇÏ¸é º¹¼öÀÇ epoll À̺¥Æ®°¡ »ý¼ºµÇ¹Ç·Î È£Ãâ Ãø¿¡´Â EPOLLONESHOT Ç÷¡±×¸¦ ÁöÁ¤ÇÏ´Â ¿É¼ÇÀÌ ÀÖ´Ù. ÀÌ Ç÷¡±×´Â epoll¿¡ ´ëÇØ¼­ epoll_wait ¿¡ ÀÇÇÑ À̺¥Æ®¸¦ ¼ö½ÅÇÑ ´ÙÀ½¿¡ °ü·ÃÇÏ´Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ¹«È¿·Î ½ÃŲ´Ù. EPOLLONESHOT Ç÷¡±×°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì epoll_ctl ¿¡  EPOLL_CTL_MOD ¸¦ ÁöÁ¤ÇØ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÀçÂ÷ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀº È£Ãâ ÃøÀÇ Ã¥ÀÓÀÌ´Ù.

 

Á¦¾ÈÇÏ´Â »ç¿ë¹ýÀÇ ¿¹

level trigger ÀÎÅÍÆäÀ̽º·Î¼­ »ç¿ëÇÒ ¶§ epoll ÀÇ »ç¿ë¹ýÀº poll°ú °°´Ù. ±×·¯³ª edge trigger·Î¼­ »ç¿ëÇÏ´Â °æ¿ì´Â ¾îÇø®ÄÉÀ̼ÇÀÇ À̺¥Æ® ·çÇÁ·Î stall(stall) ÇÏÁö ¾Ê°Ô  »ç¿ë¹ýÀ» º¸´Ù ¸íÈ®ÇÏ°Ô ÇØ µÑ Çʿ䰡 ÀÖ´Ù. ÀÌ ¿¹¿¡¼­´Â ¸®½º³Ê´Â ºí·Ï ÇÏÁö ¾Ê´Â ¼ÒÄÏÀÌ¸ç  listenÀÌ ºÒ¸®°í ÀÖ´Ù. ÇÔ¼ö do_use_fd()´Â read ¶Ç´Â write¿¡ ÀÇÇØ EAGAIN °¡ µ¹·ÁÁÖ¾îÁú ¶§±îÁö´Â »õ·Î¿ï Áغñ ³¡³­ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ »ç¿ëÇÑ´Ù. À̺¥Æ® ±¸µ¿ ½ºÅ×ÀÌÆ® ¸Ó½Å ¾îÇø®ÄÉÀ̼ÇÀº EAGAIN (À»)¸¦ ¼ö½ÅÇÑ ÈÄ °æÇâ »óŸ¦ ±â·ÏÇØ µÎ¾î¾ß ÇÏ´Â °ÍÀÌ´Ù. À̰Ϳ¡ ÀÇÇØ ´ÙÀ½ÀÇ do_use_fd() È£Ãâ ¶§¿¡ ÀÌÀü¿¡ Á¤Áö Çߴµ¥·ÎºÎÅÍ read ¶Ç´Â write(2) À» °è¼ÓÇÒ ¼ö°¡ ÀÖ´Ù.

struct epoll_event ev, *events;

 

for(;;) {

    nfds = epoll_wait(kdpfd, events, maxevents, -1);

 

    for(n = 0; n < nfds; ++n) {

        if(events[n].data.fd == listener) {

            client = accept(listener, (struct sockaddr *) &local,

                            &addrlen);

            if(client < 0){

                perror("accept");

                continue;

            }

            setnonblocking(client);

            ev.events = EPOLLIN | EPOLLET;

            ev.data.fd = client;

            if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, client, &ev) < 0) {

                fprintf(stderr, "epoll set insertion error: fd=%d,

                        client);

                return -1;

            }

        }

        else

            do_use_fd(events[n].data.fd);

    }

}

edge trigger ÀÎÅÍÆäÀ̽º·Î¼­ »ç¿ëÇÏ´Â °æ¿ì ¼º´É»óÀÇ ÀÌÀ¯¿¡ ÀÇÇØ ÇÑ ¹ø (EPOLLIN|EPOLLOUT) À» ÁöÁ¤ÇÏ°í ³ª¼­ (EPOLL_CTL_ADD) ·Î ÆÄÀÏ µð½ºÅ©¸³Å͸¦ epoll ÀÎÅÍÆäÀ̽º¿¡ Ãß°¡ÇÒ ¼ö°¡ ÀÖ´Ù. À̰Ϳ¡ ÀÇÇØ epoll_ctl¿¡ EPOLL_CTL_MOD¸¦ ÁöÁ¤ÇØ È£ÃâÇÏ´Â °ÍÀ¸·Î EPOLLIN ¿Í EPOLLOUT ÀÇ ¿¬¼ÓÀûÀÎ ¹Ù²ñÀ» ÇÇÇÒ ¼ö ÀÖ´Ù.

 

Áú¹®°ú ÇØ´ä (linux-kernel º¸´Ù)

Q1

°°Àº ÆÄÀÏ µð½ºÅ©¸³Å͸¦ 1°³ÀÇ epoll_set ¿¡ 2ȸ Ãß°¡ÇÏ¸é ¾î¶»°Ô µÉ±î?

A1

¾Æ¸¶ EEXIST¸¦ ¹ÞÀ» °ÍÀÌ´Ù. ±×·¯³ª 2°³ÀÇ thread°¡ °°Àº ÆÄÀÏ µð½ºÅ©¸³Å͸¦ 2 ȸ Ãß°¡ÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù. À̰ÍÀº ¹«ÇØÀÎ »óÅÂÀÌ´Ù.

Q2

2°³ epoll¼¼Æ®°¡ °°Àº ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ±â´Ù¸®´Â °ÍÀº °¡´ÉÇѰ¡? ¸¸¾à °¡´ÉÇϸé À̺¥Æ®´Â ¾çÂÊ ¸ðµÎ epoll ¼¼Æ®ÀÇ ÆÄÀÏ µð½ºÅ©¸³ÅÍ¿¡ º¸°íµÉ±î?

A2

°¡´ÉÇÏÁö¸¸ Ãßõ µÇÁö ¾Ê´Â´Ù. ±×¸®°í À̺¥Æ®´Â ¾çÂÊ ¸ðµÎ¿¡ º¸°íµÈ´Ù.

Q3

epoll ÆÄÀÏ µð½ºÅ©¸³ÅÍ ÀÚ½ÅÀº poll/epoll/select ÀÌ °¡´ÉÇѰ¡?

A3

°¡´ÉÇÏ´Ù.

Q4

epoll ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÀÚ½ÅÀÇ ÆÄÀÏ µð½ºÅ©¸³ÅÍ ¼¼Æ®¿¡ ³ÖÀ¸¸é ¾î¶»°Ô µÉ±î?

A4

½ÇÆÐÇÒ °ÍÀÌ´Ù. ´Ù¸¸ epoll ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´Ù¸¥ epoll ÆÄÀÏ µð½ºÅ©¸³ÅÍ ¼¼Æ®ÀÇ ³»ºÎ¿¡ Ãß°¡ÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù.

Q5

epoll ÆÄÀÏ µð½ºÅ©¸³Å͸¦ unix ¼ÒÄÏÀ¸·Î ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ º¸³»´Â °ÍÀº °¡´ÉÇѰ¡?

A5

ºÒ°¡´ÉÇÏ´Ù.

Q6

ÆÄÀÏ µð½ºÅ©¸³Å͸¦ Ŭ·Î¿ìÁî ±× ÆÄÀÏ µð½ºÅ©¸³ÅÍ´Â ¸ðµç epoll ¼¼Æ®·ÎºÎÅÍ ÀÚµ¿ÀûÀ¸·Î »èÁ¦µÉ±î?

A6

»èÁ¦µÈ´Ù.

Q7

2 °³ ÀÌ»óÀÇ À̺¥Æ®°¡ epoll_wait ÄÝÀÇ »çÀÌ¿¡ ¿ÔÀ» °æ¿ì ±×°ÍµéÀº Á¤¸®ÇØ º¸°íµÇ´ÂÁö ±×·¸Áö ¾ÊÀ¸¸é µû·Î µû·Î º¸°íµÉ±î?

A7

Á¤¸®ÇØ º¸°íµÉ °ÍÀÌ´Ù.

Q8

ÆÄÀÏ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇÑ Á¶ÀÛÀº ÀÌ¹Ì ¸ð¾ÆÁö°í ÀÖÁö¸¸ ¾ÆÁ÷ º¸°íµÇ¾î ÀÖÁö ¾ÊÀº À̺¥Æ®¿¡ ¿µÇâÀ» ÁÙ±î?

A8

±âÁ¸ÀÇ ÆÄÀÏ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇØ¼­ 2°³ÀÇ Á¶ÀÛÀ» ½Ç½ÃÇÒ ¼ö°¡ ÀÖ´Ù. ÀÌ °æ¿ì »èÁ¦¿¡´Â Àǹ̰¡ ¾ø´Ù. º¯°æÇÏ¸é »ç¿ë °¡´ÉÇÑ I/O °¡ ´Ù½Ã ÀÐÈù´Ù.

Q9

EPOLLET Ç÷¡±×(edge trigger µ¿ÀÛ)À» »ç¿ëÇϰí ÀÖ´Â °æ¿ì EAGAIN ¸¦ ¹ÞÀ» ¶§±îÁö °è¼ÓÇØ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÀÐ°í ¾²±âÇÒ Çʿ䰡 ÀÖÀ»±î.

A9

±×·² ÇÊ¿ä´Â ¾ø´Ù. epoll_wait·ÎºÎÅÍ À̺¥Æ®¸¦ ¹Þ´Â °ÍÀº ¡¸±× ÆÄÀÏ µð½ºÅ©¸³ÅͰ¡ ¿ä±¸µÈ I/O Á¶ÀÛ¿¡ ´ëÇØ¼­ Áغñ°¡ ³¡³­ »óÅÂÀÌ´Ù¡¹ ¶ó°í ÇÏ´Â °ÍÀ» À¯Àú¿¡°Ô ³ªÅ¸³»´Â °ÍÀÌ´Ù. ¡¸´ÙÀ½ÀÇ IN À» ¹ÞÀ» ¶§±îÁö´Â ÆÄÀÏ µð½ºÅ©¸³ÅÍ´Â Áغñ°¡ ³¡³­ »óÅÂÀÌ´Ù¡¹ ¿Í ´Ü¼øÇÏ°Ô »ý°¢ÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù. ±×·¯ÇÑ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ¾ðÁ¦ ¾î¶»°Ô »ç¿ëÇÒ±î´Â ¿ÏÀüÈ÷ À¯Àú¿¡°Ô ¸Ã°í ÀÖ´Ù. ±×¸®°í Àоîµé¿© ¿ë / ±âÀÔ¿ë I/O °ø°£ÀÌ ¾²¿©Áø »óÅ´ , ´ë»óÀÌ µÇ´Â ÆÄÀÏ µð½ºÅ©¸³ÅͷκÎÅÍ ÀоîµéÀÎ µ¥ÀÌÅÍ·® ¶Ç´Â ±âÀÔÇÑ µ¥ÀÌÅÍ·®À» üũÇÏ´Â °ÍÀ¸·Î °ËÁöÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é ¾î´À ƯÁ¤ÀÇ ¾çÀÇ µ¥ÀÌÅ͸¦ ÀоîµéÀ̱⠶§¹®¿¡ read¸¦ ºÒ·¶À» ¶§¿¡  read°¡ µ¹·ÁÁØ ¾Æ¸£¹ÙÀÌÆ®¼ö°¡ ±×°Íº¸´Ù Àû¾ú´ø °æ¿ì ±× ÆÄÀÏ µð½ºÅ©¸³ÅÍÀÇ Àбâ¿ë I/O °ø°£ÀÌ ¾²¿©Áø °ÍÀ» ¾È´Ù. write ÇÔ¼ö¸¦ »ç¿ëÇØ ¾²½Ãň ÇÒ ¶§µµ °°Àº °ÍÀ» ¸»ÇÒ ¼ö ÀÖ´Ù.

 

ÈçÈ÷ ÀÖ´Â ÇÔÁ¤°ú ȸÇÇ ¹æ¹ý

o ±â¾Æ (starvation) (edge trigger)

Å« I/O °ø°£ÀÌ ÀÖ´Â °æ¿ì  ±× I/O °ø°£ÀÇ µ¥ÀÌÅ͸¦ ¸ðµÎ ó¸®(drain) ÇÏ·Á°í ÇÏ¸é ´Ù¸¥ ÆÄÀÏÀÌ Ã³¸®µÇÁö ¾Ê°í ±¾°í¸¦ ¹ß»ý½ÃŰ´Â ÀÏÀÌ ÀÖ´Ù. À̰ÍÀº epoll ¿¡ °íÀ¯ÀÇ °ÍÀº ¾Æ´Ï´Ù.

ÀÌ ¹®Á¦ÀÇ ÇØ°á¹ýÀº Áغñ°¡ ³¡³­ »óÅÂÀÇ ¸®½ºÆ®¸¦ °ü¸®ÇÏ¸ç °ü·ÃÇÏ´Â data ±¸Á¶Ã¼ Áß¿¡¼­ ÆÄÀÏ µð½ºÅ©¸³ÅͰ¡ ÀÌ¿ë °¡´ÉÇÏ´Ù ¶ó°í ¸¶Å© ÇÏ´Â °ÍÀÌ´Ù. °Å±â¿¡ µû¶ó ÀÌ¿ë °¡´ÉÇÑ ¸ðµç ÆÄÀÏ Áß¿¡¼­ ¾î´À ÆÄÀÏÀ» ó¸®ÇÒ Çʿ䰡 ÀÖÀ»±î¸¦ ±â¾ïÇÒ ¼ö°¡ ÀÖ¾î °Ô´Ù°¡ Â÷·Ê·Î ó¸® (round robin) ÇÒ ¼ö°¡ ÀÖ´Ù. ÀÌ¹Ì ÀÌ¿ë °¡´ÉÇÑ ÆÄÀÏ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇØ¼­ ±×°Í ÀÌÈÄ¿¡ ¹Þ´Â À̺¥Æ®¸¦ ¹«½ÃÇÒ ¼öµµ ÀÖ´Ù.

o À̺¥Æ® ij½¬¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì

À̺¥Æ® ij½¬¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì ¶Ç´Â epoll_wait ·ÎºÎÅÍ ¹ÝȯµÈ ¸ðµç ÆÄÀÏ µð½ºÅ©¸³Å͸¦ °Ý³³Çϰí ÀÖ´Â °æ¿ì Ŭ·Î¿ìÁî µÈ °ÍÀ» µ¿ÀûÀ¸·Î ¸¶Å© ÇÏ´Â(Áï ÀüÀÇ À̺¥Æ®ÀÇ Ã³¸®¿¡ ÀÇÇØ ¸¶Å© µÇ´Â) ¹æ¹ýÀ» Á¦°øÇØ¾ß ÇÑ´Ù. epoll_wait·ÎºÎÅÍ 100 °³ÀÇ À̺¥Æ®¸¦ ¹Þ¾Æ À̺¥Æ® #47 ÀÎ Á¶°ÇÀ¸·Î À̺¥Æ® 13ÀÌ ´ÝÇôÁö¸é) °¡Á¤ÇÑ´Ù. À̺¥Æ® 13ÀÇ ±¸Á¶Ã¼¸¦ »èÁ¦ÇØ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ close()Çϸé À̺¥Æ® ij½¬´Â ±× ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ±â´Ù¸®´Â À̺¥Æ®°¡ Á¸ÀçÇÑ´Ù°í ÇÏ¿© È¥¶õÀÌ ÀϾ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â 1°³ÀÇ ¹æ¹ýÀº À̺¥Æ® 47ÀÇ Ã³¸®¸¦ Çϰí ÀÖ´Â µ¿¾È¿¡ ÆÄÀÏ µð½ºÅ©¸³ÅÍ 13À» »èÁ¦ÇØ close() Çϱâ À§Çؼ­ epoll_ctl(EPOLL_CTL_DEL)¸¦ È£ÃâÇØ °ü·ÃÁöÀ» ¼ö ÀÖ¾ú´ø data ±¸Á¶Ã¼¸¦ »èÁ¦°¡ ³¡³­ »óÅÂ¿Í ¸¶Å© ÇØ  Å¬¸° ¾÷ ¸®½ºÆ®¿¡ ¸µÅ©ÇÏ´Â °ÍÀÌ´Ù. ¹èġó¸® Áß¿¡¼­ ÆÄÀÏ µð½ºÅ©¸³ÅÍ 13¿¡ ´ëÇÑ ´Ù¸¥ À̺¥Æ®¸¦ ã¾Æ³ÂÀ» °æ¿ì ±× ÆÄÀÏ µð½ºÅ©¸³ÅͰ¡ ÀÌÀü¿¡ »èÁ¦µÈ °ÍÀÌ´Ù°í ¾Ë¹Ç·Î È¥¶õÀº ÀϾÁö ¾Ê´Â´Ù.

 

ÁذÅ

epoll´Â Linux Ä¿³Ú 2.5.44 ¿¡ µµÀÔµÈ »õ·Î¿î API ÀÌ´Ù. ÀÎÅÍÆäÀ̽º´Â Linux Ä¿³Ú 2.5.66 ·Î È®Á¤ µÇ´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù.