ºñ µ¿±â ÀÔÃâ·Â ÇÁ·Î±×·¡¹Ö
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

ºñµ¿±â ÀÔÃâ·Â ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ¼­ ´Ù·ê °èȹÀÓ. POSIX AIOµµ ÇÔ²².

Contents

1 ºñ µ¿±â ÀÔÃâ·Â ÇÁ·Î±×·¡¹Ö
1.1 ÀÔÃâ·Â ¸ðµ¨
1.1.1 µ¿±â ºÀ¼â ¸ðµ¨
1.1.2 µ¿±â ºñ ºÀ¼â ¸ðµ¨
1.1.3 ºñ µ¿±â ºÀ¼â ¸ðµ¨
1.1.4 ºñµ¿±â ºñ ºÀ¼â ¸ðµ¨
1.2 ºñ µ¿±â ÀÔÃâ·ÂÀÇ ÀåÁ¡°ú ´ÜÁ¡
1.3 ¼ÒÄÏÀ» ºñ ºÀ¼â ÀÔÃâ·Â¿¡ ´ëÀÀÇϵµ·Ï Çϱâ
1.3.1 acceptÇÔ¼ö¿Í ºñ ºÀ¼â ¼ÒÄÏ
1.3.2 read/writeÇÔ¼ö¿Í ºñ ºÀ¼â ¼ÒÄÏ
1.3.3 connectÇÔ¼ö¿Í ºñ ºÀ¼â ¼ÒÄÏ
1.4 ÀÔÃâ·Â ´ÙÁßÈ­ÀÇ ÀÔÃâ·Â ¸ðµ¨
1.5 epollÀÇ ÀÔÃâ·Â ¸ðµ¨
1.6 ¸®¾ó ŸÀÓ ½Ã±×³ÎÀÇ ÀÔÃâ·Â ¸ðµ¨
2 °³ÀÎÀûÀ¸·Î ¼±È£ÇÏ´Â ¸ðµ¨
3 POSIX AIO
3.1 AIO API
4 ±âŸ °ü·Ã ±â¼úµé

1 ºñ µ¿±â ÀÔÃâ·Â ÇÁ·Î±×·¡¹Ö

1.1 ÀÔÃâ·Â ¸ðµ¨

¼ÒÄÏ ÀÀ¿ë ÇÁ·Î±×·¥À» °³¹ßÇÏ´Ùº¸¸é Á¾Á¾ ºÀ¼â(blocking) ¼ÒÄÏ, ºñ ºÀ¼â(non-blocking) ¼ÒÄÏÀ̶õ ¸»À» µè´Â´Ù. ºÀ¼â ¼ÒÄÏ º¸´Ù ºñ ºÀ¼â ¼ÒÄÏÀÌ ¼º´ÉÀÌ ÁÁ´Ù´À´Ï, ÀÌ·± °æ¿ì¿¡´Â ºñ ºÀ¼â ¼ÒÄÏÀ» »ç¿ëÇØ¾ß ÇÑ´Ù´À´Ï ÇÏ´Â °ÍµéÀÌ ±×°ÍÀÌ´Ù. ƯÈ÷ ¿äÁò¿¡´Â ´ÜÀÏ ÇÁ·Î¼¼½º (´ÜÀÏ ¾²·¹µå)ó¸® ¹æ½ÄÀÌ ¼±È£µÇ¸é¼­, ºñ ºÀ¼â ¼ÒÄÏ¿¡ ´ëÇÑ °ü½ÉÀÌ ¸¹¾ÆÁö°í ÀÖ´Ù.

ºÀ¼â ¸ðµ¨°ú¿Í ºñ ºÀ¼â¸ðµ¨Àº´Â ÇÁ·Î±×·¥ÀÌ ¾î¶² »óÅ·ΠÀÛµ¿ÇÏ´Â Áö¸¦ ¹¦»çÇÑ´Ù. ÇÔ¼öÈ£ÃâÀ» ÇÑ ¿µ¿ª¿¡¼­ ÇÁ·Î±×·¥ÀÌ (¹Ýȯ µÉ ¶§±îÁö)´ë±â Çϸé, ºÀ¼â ¸ðµ¨ ±×·¸Áö ¾ÊÀ¸¸é ºñ ºÀ¼â ¸ðµ¨¶ó°í ÇÑ´Ù.

µ¿±â / ºñ µ¿±â´Â µ¥ÀÌÅÍ »óÅÂ¿Í °ü·ÃµÈ´Ù. µ¥ÀÌÅÍÀÇ ÀÔÃâ·Â »óŸ¦ ¼­·Î°¡ ¾Ë¸é µ¿±â, ±×·¸Áö ¾ÊÀ¸¸é ºñ µ¿±â´Ù. µ¥ÀÌÅÍ »óÅÂ¿Í °ü·ÃµÇ¾î ÀÖ´Ù. µ¿±â ÀÔÃâ·Â ¸ðµ¨¿¡¼­´Â A¿¡¼­ µ¥ÀÌÅ͸¦ Áö±Ý ¾²¸é, B¿¡¼­µµ Áö±Ý µ¥ÀÌÅ͸¦ ÀÐÀ» °ÍÀ» ¾È´Ù. B´Â A°¡ µ¥ÀÌÅ͸¦ º¸³»¸é, ÀÌ¿¡ ¸ÂÃß¾î µ¥ÀÌÅ͸¦ Àд´Ù.

ºñ µ¿±â ÀÔÃâ·Â ¸ðµ¨Àº ÀԷ°ú Ãâ·ÂÀÇ ½ÃÁ¡À» ¾ËÁö ¸øÇÏ´Â »óŸ¦ ÀǹÌÇÑ´Ù. A°¡ B·Î µ¥ÀÌÅ͸¦ º¸³½´Ù°í °¡Á¤ÇØ º¸ÀÚ. ÀÌ »óÅ¿¡¼­ B´Â A°¡ ¾ðÁ¦ µ¥ÀÌÅ͸¦ º¸³¾Áö ¾Ë ¼ö ¾øÀ¸¸ç, µ¥ÀÌÅ͸¦ ±â´Ù¸®Áö ¾Ê´Â´Ù. ´ë½Å "À̺¥Æ® ÅëÁö"¸¦ ±â´Ù¸°´Ù. Áï ´Ù¸¥ ÀÏÀ» Çϰí ÀÖ´Ù°¡ "A°¡ µ¥ÀÌÅ͸¦ Àü¼ÛÇß´Ù"¶ó´Â ºñ µ¿±âÀû ½ÅÈ£¸¦ ¹ÞÀ¸¸é ±×¶§, µ¥ÀÌÅÍ Àб⸦ ½ÃÀÛÇÑ´Ù. ¾²´Â ½ÃÁ¡°ú Àд ½ÃÁ¡ÀÌ ÀÏÄ¡ ÇÏÁö ¾Ê´Â´Ù.

ÀϹÝÀûÀ¸·Î ¼ÒÄÏÀº ºÀ¼â ¼ÒÄÏ À¸·Î ¸¸µé¾îÁø´Ù. µ¥ÀÌÅÍ ÀÔÃâ·Â »óÅ·Πº¸ÀÚ¸é µ¿±â ÀÔÃâ·Â »óÅÂÀÎ "µ¿±â & ºÀ¼â ¸ðµ¨"ÀÌ´Ù. ºÀ¼âÇü ¼ÒÄÏÀ̶õ Àбâ¿Í ¾²±âÀÇ °úÁ¤ÀÌ ¿ÏÀüÈ÷ ³¡³¯ ¶§ ±îÁö, ¸Ó¹°·¯ ÀÖÀ½À» ÀǹÌÇÑ´Ù. readÇÔ¼ö¸¦ ¿¹·Î µé¾îº¸ÀÚ. ºÀ¼âÇü ¼ÒÄÏÀ» readÇÒ °æ¿ì, readÇÔ¼ö´Â µ¥ÀÌÅ͸¦ ¸ðµÎ ÀÐÀ» ¶§±îÁö ´ë±âÇÑ´Ù. ºÀ¼â ¼ÒÄÏÀ» »ç¿ëÇϸé, ÇØ´ç ¿µ¿ª¿¡¼­ ¸Ó¹«¸£±â ¶§¹®¿¡ ´Ù¸¥ ÀÔÃâ·Â °ü·Ã ÀÛ¾÷À» ÇÒ ¼ö ¾ø´Ù´Â ¹®Á¦°¡ »ý±ä´Ù. ¿¹ÄÁµ¥, µÎ °³ ÀÌ»óÀÇ ÀÔÃâ·ÂÀ» ó¸®ÇÒ ¼ö ¾ø´Ù. ÆÄÀÏ ÁöÁ¤ ¹øÈ£ 4¿Í 5¸¦ °¡Áø ¼ÒÄÏÀÌ ÀÖ´Ù. ÇöÀç ÇÁ·Î±×·¥Àº 4¹ø ¼ÒÄÏ¿¡¼­ Àбâ À§Çؼ­ ±â´Ù¸®°í ÀÖ´Ù¸é, 4¹ø ¼ÒÄÏ¿¡¼­ÀÇ Àбâ ÀÛ¾÷ÀÌ ³¡³ª±â Àü¿¡´Â 5¹ø ¼ÒÄÏÀ» ó¸®ÇÒ ¼ö ¾ø´Ù.

ºñ ºÀ¼âÀÎ °æ¿ì ¼ÒÄÏ ÇÔ¼ö´Â ¹Ù·Î ¹ÝȯÇÑ´Ù. ¹Ýȯ °ªÀ» ¿¡·¯¸¦ ³ªÅ¸³»´Â -1 À» °¡Áø´Ù. ½ÇÁ¦ ¿¡·¯°¡ ¾Æ´Ô¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ºñ ºÀ¼â ¼ÒÄÏÀ» »ç¿ëÇÒ °æ¿ì¿¡´Â ÇÔ¼ö ¹Ýȯ °ªÀÌ ¾Æ´Ñ, errno°ªÀ» ÀÌ¿ëÇØ¼­ ÇÔ¼ö »óŸ¦ °Ë»çÇÑ´Ù.

ºñ ºÀ¼â´Â µÎ °¡Áö ¹æ¹ýÀ¸·Î ±¸ÇöÇÑ´Ù.
  1. ÀÔ·ÂÀ̳ª Ãâ·Â ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡, ÆÄÀϵé·Î ºÎÅÍ ÀԷ°ú Ãâ·ÂÀÌ ÀÖ´ÂÁö¸¦ °Ë»çÇÑ´Ù.
    ÀÔÃâ·Â ´ÙÁßÈ­¿Í epoll¿¡¼­ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ÀÔÃâ·Â ÇÔ¼öµéÀº ¿©ÀüÈ÷ ºÀ¼âÀÌÁö¸¸, À̵éÀ» È£ÃâÇϱâÀü¿¡ ( select³ª pollÇÔ¼ö·Î ) ÀÔÃâ·ÂÀ» °Ë»çÇØ¼­ µ¥ÀÌÅͰ¡ ÀÖÀ» ¶§¸¸, ÀÔÃâ·Â ÇÔ¼öµéÀ» °Ë»çÇϱ⠶§¹®¿¡ "ºñ ºÀ¼â ÀΰÍó·³" ÀÛµ¿ÇÑ´Ù. ÀÔÃâ·Â ÇÔ¼ö¸¦ ºñ ºÀ¼â·Î ÇØ¼­ ÀÔÃâ·Â ´ÙÁßÈ­¸¦ ±¸ÇöÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù.
  2. ÆÄÀÏÀ» ºñ ºÀ¼â·Î ÇÑ´Ù. ±×¸®°í ºñµ¿±â ÅëÁö (asynchronous notification)À» ±â´Ù¸°´Ù.
    ¿¹¸¦ µé¾î Ŭ¶óÀÌ¾ðÆ®¿¡¼­ µ¥ÀÌÅ͸¦ Àü¼ÛÇϸé, À̸¦ ¹ÞÀº ¼­¹öÀÇ ¼ÒÄÏÀº "read event"¸¦ ¹ß»ýÇÑ´Ù. À̺¥Æ®´Â À̺¥Æ® Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â µ¥ÀÌÅÍ¿¡ ´ëÇÑ Æ÷ÀÎÅ͵µ ÇÔ²² ³Ñ±ä´Ù. À̺¥Æ® Á¤º¸¿¡´Â À̺¥Æ®°¡ ¹ß»ýÇÑ ¼ÒÄÏ ÁöÁ¤ ¹øÈ£, À̺¥Æ®°¡ ¹ß»ýÇÑ ÇÁ·Î¼¼½º¿Í °°Àº Á¤º¸µéÀÌ µé¾îÀÖ´Ù. ÀÌ Á¤º¸¸¦ ÀÌ¿ëÇØ¼­ µ¥ÀÌÅ͸¦ ó¸®ÇÑ´Ù.
  3. ºÀ¼â ¼ÒÄÏ : ¼ÒÄÏ ÀÛ¾÷ÀÌ ³¡³ª±â Àü±îÁö ÇØ´ç ¿µ¿ª¿¡¼­ ´ë±âÇÑ´Ù.

ÀÔÃâ·Â ¸ðµ¨Àº "ºÀ¼â/ºñºÀ¼â" ¿Í "µ¿±â/ ºñ µ¿±â"ÀÇ Á¶ÇÕ¿¡ µû¶ó 4°¡Áö ÀÔÃâ·Â ¸ðµ¨ÀÌ Á¸ÀçÇÑ´Ù.

  1. ¼ÒÄÏÀº ±âº»ÀûÀ¸·Î ºÀ¼â&µ¿±â ¸ðµå·Î ¸¸µé¾î Áø´Ù.
  2. O_NONBLOCK·Î µ¿±â&ºñ ºÀ¼â ¸ðµå·Î ¸¸µé ¼ö ÀÖ´Ù.
  3. ÀÔÃâ·Â ´ÙÁßÈ­ ±â¼ú ÀÚü´Â ºñ µ¿±â ¸ðµ¨À» µû¸¥´Ù. ¼ÒÄÏÀÌ ºÀ¼â¸é "ºñ µ¿±â & ºÀ¼â" ¸ðµ¨ÀÌ µÈ´Ù. epollµµ ¸¶Âù°¡Áö´Ù.
  4. ¸®¾ó ŸÀÓ ½Ã±×³Î°ú AIO´Â "ºñ µ¿±â & ºñ ºÀ¼â"¸ðµ¨À» µû¸¥´Ù. epoll°ú ÀÔÃâ·Â ´ÙÁßÈ­´Â ¼ÒÄÏÀ» "ºñ ºÀ¼â"·Î ÇÒ°æ¿ì, "ºñ µ¿±â & ºñ ºÀ¼â"¸ðµ¨ÀÌ µÈ´Ù.

ÀÔÃâ·Â ´ÙÁßÈ­¿Í epollÀ» "ºñ µ¿±â & ºñ ºÀ¼â"¸ðµ¨·Î ÇØ¼­ ¾òÀ» ¼ö ÀÖ´Â ÀÌÀÍÀÌ ÀÖ´ÂÁö¿¡ ´ëÇØ¼­´Â ȸÀÇÀûÀÌ´Ù. ¾îÂ÷ÇÇ select³ª epoll_wait¿¡¼­ ¹ÝȯµÈ ÈÄ¿¡´Â ÀÐÀ» µ¥ÀÌÅͰ¡ ÀÖ´Â°Ô ºÐ¸íÇÏ´Ï, ºÀ¼â ¸ðµå·Î ÀÛµ¿Çصµ µÇ±â ¶§¹®ÀÌ´Ù. ´Ù¸¸ accept¸¦ À§ÇÑ "µè±â ¼ÒÄÏ"Àº ºñµ¿±â·Î ÇßÀ» ¶§ ¾òÀ» ÀÌÀÍÀÌ ÀÖÀ» °ÍÀ¸·Î »ý°¢µÈ´Ù. ¿¬°á ´ë±â¿­¿¡ ÀÖ´Â ¿¬°á ¿äûÀ» Çѹø¿¡ ²¨³»¿Ã ¼ö Àֱ⠶§¹®ÀÌ´Ù.

1.1.1 µ¿±â ºÀ¼â ¸ðµ¨

  1. readÇÔ¼ö¸¦ È£ÃâÇϸé, Ä¿³Î ¸ðµå·Î ¿äûÀÌ °¡°í ÀÔ·ÂÀ» ±â´Ù¸°´Ù.
  2. ¾ÖÇø®ÄÉÀ̼ÇÀº µ¥ÀÌÅÍ ÀÔ·ÂÀÌ Àֱ⠱îÁö ºÀ¼âµÈ´Ù.
  3. µ¥ÀÌÅͰ¡ ÀԷµǸé, Ä¿³Î ¸ðµå¿¡¼­ À¯Àú¸ðµå·Î µ¥ÀÌÅͰ¡ º¹»çµÈ´Ù.

1.1.2 µ¿±â ºñ ºÀ¼â ¸ðµ¨

  1. readÇÔ¼ö´Â ¹Ù·Î ¹ÝȯÇÑ´Ù. µ¥ÀÌÅͰ¡ ÁغñµÇÁö ¾Ê¾Ò´Ù¸é, errno´Â EAGAINÀ¸·Î ¼³Á¤µÈ´Ù.
  2. À̸¦ ¹Ýº¹ÇÑ´Ù.
  3. ¸¸¾à µ¥ÀÌÅͰ¡ ÁغñµÇ¾î ÀÖ´Ù¸é, µ¥ÀÌÅ͸¦ Àд´Ù.
µ¥ÀÌÅͰ¡ ÁغñµÇ±â Àü±îÁö ¹Ù»Ú°Ô ¼øÈ¯ÇØ¾ß ÇÏ´Â busy wait »óÅ¿¡ ³õÀÏ ¼ö ÀÖ´Ù.

1.1.3 ºñ µ¿±â ºÀ¼â ¸ðµ¨

  1. µ¿±â ºñ ºÀ¼â ¸ðµ¨Àº °è¼Ó readÇÔ¼ö¸¦ È£ÃâÇϱ⠶§¹®¿¡ busy wait »óÅ¿¡ ³õÀÏ ¼ö ÀÖ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.
  2. ºñ µ¿±â ºÀ¼â ¸ðµ¨Àº ÀÔÃâ·Â ÇÔ¼ö È£ÃâÀü¿¡ ÀÔÃâ·Â µ¥ÀÌÅͰ¡ ÀÖ´ÂÁö¸¦ °Ë»çÇÏ´Â ÇÔ¼ö(select ȤÀº poll)¸¦ ¹Ì¸® ¹èÄ¡ÇÑ´Ù.
  3. ÀÔÃâ·Â µ¥ÀÌÅͰ¡ ¾øÀ» ¶§´Â ºÀ¼âµÈ´Ù.
  4. ÀÔÃâ·Â µ¥ÀÌÅͰ¡ ÀÖÀ¸¸é, ºñ·Î¼­ ÀÔÃâ·Â ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÔÃâ·Â ÇÔ¼ö´Â ºÀ¼â ¸ðµå·Î ÀÛµ¿ÇÑ´Ù.
ºñ µ¿±â ºÀ¼â ¸ðµ¨Áß epoll¿¡ °ü½ÉÀ» °£´Ù. ÇöÀç ¸®´ª½º¿¡¼­ °¡Àå È¿À²ÀûÀÎ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö µµ±¸·Î ¾Ë·ÁÁ® ÀÖ´Ù.

1.1.4 ºñµ¿±â ºñ ºÀ¼â ¸ðµ¨

aio¸¦ ±âÁØÀ¸·Î ¼³¸í
  1. aio_readÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
  2. ´Ù¸¥ ÀÏÀ» ÇÑ´Ù.
  3. ÀÐÀ» µ¥ÀÌÅͰ¡ ¹ß»ýÇϸé, Äݹé ÇÔ¼ö ȤÀº ½Ã±×³Î Çڵ鷯·Î µ¥ÀÌÅ͸¦ ó¸®ÇÑ´Ù.


1.2 ºñ µ¿±â ÀÔÃâ·ÂÀÇ ÀåÁ¡°ú ´ÜÁ¡

ºñ µ¿±â ÀÔÃâ·ÂÀ» ÀÌ¿ëÇÏ¸é ´ÜÀÏ ÇÁ·Î¼¼½º&´ÜÀÏ ¾²·¹µå¿¡¼­ ¿©·¯ °³ÀÇ ¼ÒÄÏÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. (¾ö¹ÐÈ÷ ¸»Çؼ­ ÀÔÃâ·Â ´ÙÁßÈ­´Â ºñµ¿±â ÀÔÃâ·ÂÀº ¾Æ´ÏÁö¸¸, ºñ µ¿±â ÀÔÃâ·ÂÀÇ ¹üÁÖ¿¡ Æ÷ÇÔ½ÃÄ×´Ù.) ºñ µ¿±â ÀÔÃâ·ÂÀÌ °¡Áö´Â ÀåÁ¡°ú ´ÜÁ¡¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ¿©·¯ °³ÀÇ ¼ÒÄÏÀ» ó¸®ÇÒ ¼ö Àֱ⠶§¹®¿¡ ¸ÖƼ ¾²·¹µå ¹æ½Ä°ú ¸¹Àº ºñ±³°¡ µÉ °ÍÀÌ´Ù.
  1. ¾²·¹µå´Â »ý°¢¸¸Å­ È¿À²ÀûÀ̰í ÀÚÀ¯·Î¿î µµ±¸°¡ ¾Æ´Ï´Ù. »ý°¢ÀÌ»óÀÇ Á¦¾à»çÇ×À» °¡Áö°í ÀÖ´Ù. 500°³ ÀÌ»óÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ó¸®Çϱâ À§Çؼ­ 500°³ÀÇ ¾²·¹µå¸¦ ¸¸µç´Ù°í »ý°¢Çغ¸ÀÚ. (ÀÌ ¹®Á¦´Â ¾²·¹µå Ç®·Î ¾î´À Á¤µµ ÇØ°áÇÒ ¼ö ÀÖ±ä ÇÏ´Ù.) ºñ µ¿±â ÀÔÃâ·ÂÀº ´ÜÀÏ ¾²·¹µåó¸® ¹æ½ÄÀ̹ǷΠÀÌ·¯ÇÑ Á¦ÇÑ¿¡¼­ ÀÚÀ¯·Ó´Ù.
  2. ºñ µ¿±â ÀÔÃâ·ÂÀ» ¾²·¹µå¿Í ´Ü¼øºñ±³ÇÏ´Â °Ç Èûµé´Ù. ºñ µ¿±â ÀÔÃâ·ÂÀº ¾²·¹µå¿Í °°Àº º´·Äó¸® ¹æ¹ýÀ» Á¦°øÇÏÁø ¾Ê±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¸¹Àº °æ¿ì ±»ÀÌ º´·Ä·Î ó¸®ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ¿¹¸¦ µé¾î äÆÃ ÇÁ·Î±×·¥ °°Àº °æ¿ì ±»ÀÌ ¸ÖƼ ¾²·¹µå ¹æ½ÄÀ» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù.
  3. ¸ÖƼ ¾²·¹µå(¸ÖƼ ÇÁ·Î¼¼½º)´Â º¹ÀâÇÑ ÇÁ·Î±×·¡¹Ö ±â¼úÀ» ¿ä±¸ÇÑ´Ù. Àá±Ý, µ¿±âÈ­, IPC µîµîµî... ¼ö¸¹Àº ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÑ´Ù.
  4. µð¹ö±ëÀÌ ¾î·Æ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. (±×·¡µµ ¸ÖƼ ¾²·¹µå ÇÁ·Î±×·¥º¸´Ù´Â ½±´Ù)
  5. µ¥ÀÌÅÍ ¿¬»êÀÌ ±ä ÇÁ·Î±×·¥ÀÇ °æ¿ì ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù. º´·Ä󸮰¡ ¾Æ´Ï¹Ç·Î ´ÙÀ½ ÀÔÃâ·ÂÀÌ ¿À·£½Ã°£ ±â´Ù¸± ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÀÌ ¹®Á¦´Â µ¥ÀÌÅÍ Ã³¸®¸¦ À§ÇÑ ¾²·¹µå Ç®À» µÎ´Â °ÍÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù.

ÃÖ±ÙÀÇ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö Æ®·£µå´Â "´ÜÀÏ ¾²·¹µå ±â¹Ý & ºñµ¿±â ÀÔÃâ·Â"ÀÌ´Ù.

1.3 ¼ÒÄÏÀ» ºñ ºÀ¼â ÀÔÃâ·Â¿¡ ´ëÀÀÇϵµ·Ï Çϱâ

¼ÒÄÏÀº "ºÀ¼â & µ¿±â"¸ðµå·Î ¸¸µé¾îÁø´Ù. fcntl(2)ÇÔ¼ö·Î ºñ ºÀ¼â ¸ðµå·Î ¸¸µé ¼ö ÀÖ´Ù.
int fd; 
int flags; 
// ¿ì¼± F_GETFL·Î ÆÄÀÏ ÁöÁ¤ ¹øÈ£ fd°¡ °¡¸®Å°´Â ÆÄÀÏÀÇ flag°ªÀ» °¡Á®¿Â´Ù. 
if ((flags = fcntl(fd, F_GETFL, 0)) == -1) 
    flags = 0; 
 
// O_NONBLOCK·Î ºñ ºÀ¼â·Î ¸¸µç´Ù. 
fcntl(fd, F_SETFL, flags | O_NONBLOCK); 
 

¼ÒÄÏÀ» ºñ ºÀ¼â·Î ¸¸µé¾ú´Ù¸é, ÇØ´ç ¼ÒÄÏÀ» ¸Å°³ º¯¼ö·Î »ç¿ëÇÏ´Â ÇÔ¼öµéÀº ¹Ù·Î ¹ÝȯÇÑ´Ù. µ¥ÀÌÅÍ ÀÔÃâ·Â °ü·Ã ÇÔ¼öµéÀÎ accept(2), connect(2), read(2), write(2), recv(2), send(2)ÀÌ´Ù. ¹Ýȯ °ªÀº -1 À̹ǷΠ¹Ýȯ °ª¸¸À» °¡Áö°í´Â ÇÔ¼ö°¡ ½ÇÆÐÇß´ÂÁö, ¾Æ´Ï¸é ºñ ºÀ¼â¶ó¼­ ¹Ù·Î ¹ÝȯÇÑ °ÍÀÎÁö È®ÀÎÇÒ ¼ö ¾ø´Ù. errno °ªÀ¸·Î È®ÀÎÇØ¾ß Çϴµ¥, EAGAIN ȤÀº EWOULDBLOCKÀÌ¸é ºñ ºÀ¼â ¼ÒÄÏ¿¡¼­ µ¥ÀÌÅͰ¡ ÁغñµÇÁö ¾Ê¾Æ¼­ ¹ÝȯÇßÀ½À» ÀǹÌÇÑ´Ù. EAGAIN°ú EWOULDBLOCK´Â POSIX.1 ±Ô°Ý¿¡¼­ µ¿ÀÏÇÑ °ªÀ¸·Î »ç¿ëµÈ´Ù.

°£´ÜÇÑ ºñ ºÀ¼â ¼ÒÄÏ ÇÁ·Î±×·¥ ¿¹Á¦¸¦ ¸¸µé¾î º¸¾Ò´Ù. ¼³¸íÀº ÁÖ¼®À¸·Î ´ë½ÅÇÑ´Ù. ¿¡·¯ 󸮴 ½Å°æ¾²Áö ¾Ê¾Ò´Ù.
#include <sys/socket.h> 
#include <sys/stat.h> 
#include <arpa/inet.h> 
#include <stdio.h> 
#include <string.h> 
 
#include <fcntl.h> 
#include <stdlib.h> 
#include <unistd.h> 
 
#include <errno.h> 
 
#define MAXBUF  256  
 
// ºñ ºÀ¼â ¼ÒÄÏÀ¸·Î ¸¸µé±â À§ÇÑ ÇÔ¼ö 
int set_nonblock_socket(int fd) 
{ 
    int flags; 
    if((flags = fcntl(fd, F_GETFL,0)) == -1) 
    { 
        perror("fnctl error"); 
        flags = 0; 
    } 
    fcntl(fd, F_SETFL, flags | O_NONBLOCK); 
} 
 
int main(int argc, char **argv) 
{ 
    int server_sockfd, client_sockfd; 
    int client_len, n; 
    char buf[MAXBUF]; 
    struct sockaddr_in clientaddr, serveraddr; 
 
    client_len = sizeof(clientaddr); 
 
    if ((server_sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) 
    { 
        perror("socket error : "); 
        exit(0); 
    } 
    bzero(&serveraddr, sizeof(serveraddr)); 
    serveraddr.sin_family = AF_INET; 
    serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    serveraddr.sin_port = htons(atoi(argv[1])); 
 
    if(bind (server_sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) == -1) 
    { 
        perror("Error"); 
    } 
    if(listen(server_sockfd, 5) == -1) 
    { 
        perror("Error"); 
    } 
    while(1) 
    { 
        memset(buf, 0x00, MAXBUF); 
        client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr, 
                            &client_len); 
 
       // ¿¬°á ¼ÒÄÏÀ» ºñ ºÀ¼â ¼ÒÄÏÀ¸·Î ¸¸µç´Ù. 
       set_nonblock_socket(client_sockfd); 
 
        while(1) 
        { 
            memset(buf, 0x00, sizeof(buf)); 
            if ((n = read(client_sockfd, buf, MAXBUF)) < 0) 
            { 
                // errno °ªÀ» Çѹø ´õ °è»êÇØ Áà¾ß ÇÑ´Ù. 
                if(errno == EAGAIN) 
                { 
                } 
                else 
                { 
                    printf("read Error %d\n", errno); 
                    close(client_sockfd); 
                    break; 
                } 
            } 
            else if(n == 0) 
            { 
                printf("close %d\n", errno); 
                close(client_sockfd); 
                break; 
            } 
            else 
            { 
                printf("Read Data %s", buf); 
            } 
        } 
    } 
} 
 
ÀÌ ÇÁ·Î±×·¥Àº readÇÔ¼ö¿¡¼­ ¹Ù·Î ¹ÝÈ¯ÇØ¹ö¸®±â ¶§¹®¿¡ busy wait»óÅ¿¡ ³õÀÌ°Ô µÈ´Ù´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù. ½ÇÁ¦ ÀÌ·± ½ÄÀ¸·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏÁö´Â ¾Ê´Â´Ù. busy wait ¹®Á¦ ¶§¹®¿¡ "µ¿±â & ºñ ºÀ¼â"¸ðµ¨Àº °ÅÀÇ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀϹÝÀûÀ¸·Î ÀÔÃâ·Â µ¿±âÈ­ ȤÀº epoll, ¸®¾ó ŸÀÓ ½Ã±×³Î°ú °°Àº ºñ µ¿±â ¸ðµ¨°ú ÇÔ²² »ç¿ëÇÑ´Ù. "ÀÌ·± ½ÄÀ¸·Î ºñ ºñºÀ¼â ¼ÒÄÏÀ» ¸¸µé°í ¿¡·¯¸¦ üũÇÏ´Â ±¸³ª"ÇÏ´Â Á¤µµ¸¸ ÀÌÇØÇÏ°í ³Ñ¾î°¡¸é µÉ °Í °°´Ù.

1.3.1 acceptÇÔ¼ö¿Í ºñ ºÀ¼â ¼ÒÄÏ

acceptÇÔ¼ö´Â Áï½Ã ¹ÝȯÇÑ´Ù. acceptÇÔ¼ö¿¡¼­ ºñ ºÀ¼â ¼ÒÄÏÀº ÁÖ·Î listenÀ¸·Î ¸¸µç ¿¬°á ´ë±â¿­¿¡ ÀÖ´Â ¿¬°áÀ» Çѹø°Ô °¡Á®¿À±â À§Çؼ­ »ç¿ëÇÑ´Ù. ÀÌ ¹æ½ÄÀº Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á ¿äû¿¡ ºü¸£°Ô ¹ÝÀÀÇÒ ¼ö ÀÖ´Ù.
  1. ¿¬°á ´ë±â¿­¿¡ 3°³ÀÇ ¿¬°áÀÌ ÀÖ´Ù.
  2. EAGIANÀ» ¸¸³¯ ¶§ ±îÁö ·çÇÁ¸¦ µ¹¸é¼­ acceptÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

1.3.2 read/writeÇÔ¼ö¿Í ºñ ºÀ¼â ¼ÒÄÏ

¿ª½Ã Áï½Ã ¹ÝȯÇÑ´Ù. readÇÔ¼ö¿Í writeÇÔ¼ö¿¡¼­ Á÷Á¢ ±â´Ù¸®¸é busy wait »óÅ¿¡ ³õÀ̹ǷΠº¸ÅëÀº ÀÌµé ¾Õ¿¡ »óÅ ȤÀº À̺¥Æ®¸¦ °Ë»çÇϱâ À§ÇÑ ÇÔ¼öµéÀ» ³õ´Â´Ù. select, poll, sigwaitinfoµîÀÇ ÇÔ¼öµéÀÌ´Ù. ƯÁ¤ ¼ÒÄÏ¿¡ À̺¥Æ®°¡ ¹ß»ýÇØ¼­ readÇÔ¼ö°¡ È£ÃâµÇ¸é, EAGAINÀ» ¸¸³¯ ¶§±îÁö ·çÇÁ¸¦ µ¹¸é¼­ µ¥ÀÌÅ͸¦ Àд´Ù.
while(1) 
{ 
    select(...); 
    while(1) 
    { 
        read(fd,...); 
        if(errno == EAGAIN) break; 
    } 
} 
 

1.3.3 connectÇÔ¼ö¿Í ºñ ºÀ¼â ¼ÒÄÏ

ºñ ºÀ¼â ¼ÒÄÏÀ¸·Î connectÇÔ¼ö¸¦ È£ÃâÇϸé, connectÇÔ¼ö´Â Áï½Ã ¹ÝȯÇÑ´Ù. ¿¬°áÀÌ µÇ¾ú´ÂÁö´Â ³ªÁß¿¡ getsockoptÇÔ¼ö·Î È®ÀÎÀ» ÇÑ´Ù. ÁÖ·Î ¿¬°á ŸÀÓ ¾Æ¿ôÀ» °Ë»çÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù. ´ÙÀ½°ú °°Àº °úÁ¤À» °ÅÄ£´Ù.
  1. ¼ÒÄÏÀ» ºñ ºÀ¼â·Î ÇÑ´Ù.
  2. connectÇÔ¼ö·Ñ È£ÃâÇÑ´Ù. ÇÔ¼ö´Â Áï½Ã ¹ÝȯÇÒ °ÍÀÌ´Ù. ¿¬°á °úÁ¤Àº ¹é±×¶ó¿îµå¿¡¼­ ÁøÇàµÈ´Ù.
  3. selectÇÔ¼ö¸¦ ŸÀÓ ¾Æ¿ôÀ» ÁÖ°í È£ÃâÇÑ´Ù.
  4. ŸÀÓ ¾Æ¿ô ½Ã°£Àü¿¡ ¿¬°áÀÌ ¼º°øÇϸé selectÇÔ¼ö´Â ¼º°øÀûÀ¸·Î ¹ÝȯÇÒ °ÍÀÌ´Ù. ŸÀÓ ¾Æ¿ô ½Ã°£À» ÃʰúÇØ¼­ ¿¬°áµÇÁö ¾ÊÀ¸¸é ¿¡·¯¸¦ ¹ÝȯÇÑ´Ù.

ºñ ºÀ¼â ¼ÒÄϰú select¸¦ ÀÌ¿ëÇÑ ¿¬°á ŸÀÓ ¾Æ¿ô °Ë»ç ¿¹Á¦´Â connect timeout¹®¼­¸¦ Âü°íÇÑ´Ù.

¾Æ·¡ ºÎºÐÀº Á¤¸®°¡ ¾ÈµÈ ³»¿ëµéÀÓ

1.4 ÀÔÃâ·Â ´ÙÁßÈ­ÀÇ ÀÔÃâ·Â ¸ðµ¨

ÀÔÃâ·Â ´ÙÁßÈ­¸¦ ÀÌ¿ëÇÏ¸é ºÀ¼â ¼ÒÄÏ ¸ðµå·Î µÎ °³ ÀÌ»óÀÇ ¼ÒÄÏÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. ¼ÒÄÏ ÇÔ¼ö´Â ºÀ¼â¸ðµå·Î ÀÛµ¿ÇÏÁö¸¸ selectÇÔ¼ö°¡ À̵é ÇÔ¼ö ¾Õ¿¡¼­ ÆÄÀÏ »óŸ¦ Ã¼Å©ÇØ Áֱ⠶§¹®ÀÌ´Ù.

ÀÔÃâ·Â ´ÙÁßÈ­´Â selectÇÔ¼ö·Î ÆÄÀϵ鿡 µ¥ÀÌÅÍÀÇ ÀÔÃâ·ÂÀÌ ÀÖ´ÂÁö È®ÀÎÇØ¼­ ½ÅÈ£ (¹Ýȯ)ÇÏ´Â ¹æ½ÄÀ¸·Î ÀÛµ¿ÇÑ´Ù. ±×·¯¹Ç·Î ºñ µ¿±â ÀÔÃâ·Â ±â¼úÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. selectÇÔ¼ö¿¡¼­ ºÀ¼âµÇ±â ¶§¹®¿¡ ºñ µ¿±â ºÀ¼â ¸ðµ¨À» µû¸¥´Ù.

ÀÔÃâ·Â ´ÙÁßÈ­¿¡¼­ ºñ ºÀ¼â ¼ÒÄÏÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. (±×·¡µµ ¿©ÀüÈ÷ select¿¡¼­ ºÀ¼â µÇ¹Ç·Î ÇÁ·Î±×·¥Àº ºñµ¿±â ºÀ¼â ¸ðµ¨ÀÌ´Ù.)
  1. Ŭ¶óÀÌ¾ðÆ® ¿¬°áÀ» ÇѲ¨¹ø¿¡ ó¸®Çؼ­ Ŭ¶óÀÌ¾ðÆ® ¿¬°á ¿äû ´ë±â ½Ã°£À» ´ÜÃà ½Ãų ¼ö ÀÖ´Ù.
    µè±â ¼ÒÄÏ¿¡ À̺¥Æ®°¡ ¹ß»ýÇØ¼­ acceptÇÔ¼ö¸¦ È£Ãâ Çϸé, ·çÇÁ¸¦ µ¹¸é¼­ ¿¬°á ´ë±â¿­ÀÇ ¸ðµç Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ÇѲ¨¹ø¿¡ °¡Á®¿Ã ¼ö ÀÖ´Ù. EAGAINÀ» ¸¸³¯ ¶§ ±îÁö ·çÇÁ¸¦ µ¹¸é µÈ´Ù. ¸ð¾Æ¼­ ó¸®Çϱ⠶§¹®¿¡ ±×¸¸Å­ ¿¬°á ¿äû ½Ã°£À» ´ÜÃà ½Ãų ¼ö ÀÖ´Ù.

°ü·Ã ¿¹Á¦´Â ÀÔÃâ·Â ´ÙÁßÈ­ ³×Æ®¿öÅ© ÇÁ·Î±×·¥ °³¹ß¹®¼­¸¦ Âü°íÇÑ´Ù.

1.5 epollÀÇ ÀÔÃâ·Â ¸ðµ¨

epollµµ ºÀ¼â ¼ÒÄÏÀ¸·Î µÎ °³ ÀÌ»óÀÇ ¼ÒÄÏÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. ÀÔÃâ·Â ´ÙÁßÈ­¿Í µ¿ÀÏÇÏ´Ù. ÀÔÃâ·Â À̺¥Æ®¸¦ ±â´Ù¸®±â À§Çؼ­ epoll_waitÇÔ¼ö¿¡¼­ ºÀ¼âµÈ´Ù.

¿ª½Ã ºñ ºÀ¼â ¼ÒÄÏÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¾òÀ» ¼ö ÀÖ´Â ÀÌÀÍÀº ´ÙÀ½°ú °°´Ù. (ÀÔÃâ·Â ´ÙÁßÈ­¿Í µ¿ÀÏÇÑ ÀÌÀÍÀ» ¾òÀ» ¼ö ÀÖ´Ù.)
  1. Ŭ¶óÀÌ¾ðÆ® ¿¬°áÀ» ÇѲ¨¹ø¿¡ ó¸®Çؼ­ Ŭ¶óÀÌ¾ðÆ® ¿¬°á ¿äû ´ë±â ½Ã°£À» ´ÜÃà ½Ãų ¼ö ÀÖ´Ù.
    µè±â ¼ÒÄÏ¿¡ À̺¥Æ®°¡ ¹ß»ýÇØ¼­ acceptÇÔ¼ö¸¦ È£Ãâ Çϸé, ·çÇÁ¸¦ µ¹¸é¼­ ¿¬°á ´ë±â¿­ÀÇ ¸ðµç Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ÇѲ¨¹ø¿¡ °¡Á®¿Ã ¼ö ÀÖ´Ù. EAGAINÀ» ¸¸³¯ ¶§ ±îÁö ·çÇÁ¸¦ µ¹¸é µÈ´Ù. ¸ð¾Æ¼­ ó¸®Çϱ⠶§¹®¿¡ ±×¸¸Å­ ¿¬°á ¿äû ½Ã°£À» ´ÜÃà ½Ãų ¼ö ÀÖ´Ù.

"ºñ µ¿±â & ºÀ¼â ¸ðµ¨"À» µû¸£´Â epoll ÇÁ·Î±×·¥ÀÇ ¿¹´Â epoll¹®¼­¸¦ Âü°íÇϱ⠹ٶõ´Ù.

1.6 ¸®¾ó ŸÀÓ ½Ã±×³ÎÀÇ ÀÔÃâ·Â ¸ðµ¨

¸®¾ó ŸÀÓ ½Ã±×³ÎÀº ±× ÀÚü°¡ ºñ µ¿±âÀû Á¤º¸ ÅëÁö µµ±¸´Ù. °ü¸®ÇϰíÀÚ ÇÏ´Â ¼ÒÄÏ¿¡ µ¥ÀÌÅÍ ÀÔÃâ·ÂÀÌ ÀÖÀ¸¸é "½Ã±×³Î"À» ¹ß»ý½ÃŰ´Â ¹æ½ÄÀ¸·Î ÀÛµ¿ÇÑ´Ù. ¶§¹®¿¡ ¼ÒÄÏÀ» ºñ µ¿±â, ºñ ºÀ¼â »óÅ·Π¸¸µé¾î¾ß ÇÑ´Ù. ¸®¾ó ŸÀÓ ½Ã±×³Î °ü·Ã ¹®¼­´Â ¸®¾ó ŸÀÓ ½Ã±×³Î¹®¼­µéÀ» Âü°íÇϱ⠹ٶõ´Ù.

2 °³ÀÎÀûÀ¸·Î ¼±È£ÇÏ´Â ¸ðµ¨

ºñ µ¿±â ºÀ¼â ¸ðµ¨À» ¼±È£ÇÑ´Ù. ÇÁ·Î¼¼½º°¡ ¸íÈ®Çϱ⠶§¹®ÀÌ´Ù.

¹°·Ð AIO¿Í °°Àº ºñ µ¿±â ºñ ºÀ¼â ¸ðµ¨ÀÇ °æ¿ì, ÀÔÃâ·Â ÀÛ¾÷°ú º°°³·Î ´Ù¸¥ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ÇÏÁö¸¸ ´ëºÎºÐÀÇ ÇÁ·Î±×·¥ÀÌ µ¥ÀÌÅÍ ÀÔ·Â -> ó¸® -> µ¥ÀÌÅÍ Ãâ·ÂÀÇ ÁøÇà ¹æ½ÄÀ» µû¸£±â ¶§¹®¿¡, µüÈ÷ "ºñ µ¿±â ºñ ºÀ¼â"°¡ °¡Áö´Â ÀåÁ¡ÀÌ ÇÊ¿ä ¾ø´Â °æ¿ì°¡ ¸¹±â ¶§¹®ÀÌ´Ù.

3 POSIX AIO

¸®´ª½º¿¡¼­ Á¦°øÇÏ´Â ºñ µ¿±â ÀÔÃâ·Â ¸ÅÄ¿´ÏÁòÀ¸·Î ºñ±³Àû ÃÖ±Ù¿¡ (Ä¿³Î 2.6.x) Ãß°¡µÇ¾ú´Ù.

3.1 AIO API

aio_suspend ÆÄÀÏ ¸ñ·Ï¿¡¼­ À̺¥Æ®ÀÇ ¹ß»ýÀ» ±â´Ù¸°´Ù.
aio_read À̺¥Æ®°¡ ¹ß»ýÇÑ ÆÄÀÏ¿¡¼­ µ¥ÀÌÅ͸¦ Àд´Ù.
aio_write µ¥ÀÌÅ͸¦ ¾´´Ù.
aio_return
aio_error
aio_cancel


4 ±âŸ °ü·Ã ±â¼úµé

  1. Twisted : Event driven framework
    • °ÔÀÓ ³×Æ®¿öÅ© ¶óÀ̺귯¸®·Î ½ÃÀÛÇßÀ½
    • pythonÀ¸·Î ¸¸µé¾î Á³À½. ´ë·« 200K¶óÀÎ
    • web, mail, ssh¸¦ Æ÷ÇÔÇÑ 30°³ ÀÌ»óÀÇ ÇÁ·ÎÅäÄÝ Áö¿ø
    • ½ÇÁúÀûÀÎ °æÀïÀڷδ ACE°¡ ÀÖÀ½. ACE¸¦ Âü°íÇØ¼­ °³¹ßµÇ¾úÀ½.

  2. ÇϳªÀÇ ÇÁ·Î¼¼½º·Î ¿©·¯ °³ÀÇ ¼ÒÄÏÀ» ´Ù·é´Ù.
  3. ¿ì¼± BSD ¼ÒÄÏÀ» °øºÎÇØ¾ß ÇÑ´Ù.
    • ÃÖÃÊ ¸¸µé¾îÁø ¼ÒÄÏÀº ºÀ¼âÇüÀÌ´Ù. ÀÌ ¼ÒÄÏÀ» fcntlÇÔ¼ö·Î nonblocking ¼ÒÄÏÀ¸·Î º¯°æÇÑ´Ù.
  4. ÀÔÃâ·Â ´ÙÁßÈ­¸¦ ¸ÕÀú °øºÎÇϵµ·Ï ÇÏÀÚ.
  5. ÃÖ±Ù Æ®·£µå´Â epoll, kqueue, Posix AIO, Twisted ÀÌ´Ù.
  6. POSIX aio API


category_network
programing
category__5
º¸³½ Æ®·¢¹é Á¤º¸
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.