To Á¶»óÇö´Ô
¸íÈ®ÇÑ ´äº¯ Á¤¸» °¨»çÇÕ´Ï´Ù. accept°°ÀÌ Àü¿¡ ´©°¡ ¾îµð¼ ¸î¹ÙÀÌÆ®¸¦ ¹Þ¾Ò´ÂÁö ÀüÈÄ»çÁ¤À» È®ÀÎÀ» ¾ÈÇØµµ µÇ´Â atomicÇÑ À̺¥Æ®µéÀ» ¸ÖƼ½º·¹µå¿¡¼ ´õ È¿À²ÀûÀ¸·Î ó¸®ÇϱâÀ§ÇØ exclusive°¡ ³ª¿Â°Ç°¡º¸±º¿ä. ¿°Ä¡¾øÁö¸¸ Áú¹®¸î°³¸¸ ´õ ¿©ÂåºÁµµ µÉ±î¿ä?
À̰Ŵ ¿¹¸¦µé¸é¼ Áú¹®À» ÇØ¾ßµÉ°Å°°±â¶§¹®¿¡.. 2°³ÀÇ ½º·¹µå°¡ epoll_waitÀ¸·Î ´ë±â ÇϰíÀÖ´Ù°í °¡Á¤Çغ¼°Ô¿ä. 1. listenÁßÀÎ fd1¿¡ ¿ÜºÎ·ÎºÎÅÍ connect½ÃµµÇß´Ù°í Ä¿³Î¿¡ ÅëÁöµÊ. 2. epoll_waitÁßÀÎ 2°³ÀÇ ½º·¹µåÁß thread 0ÀÌ ÀϾ¼ fd1¿¡ acceptÇϰí OnAccept°°Àº ÇÔ¼ö·Î À̺¥Æ® Çڵ鸵Áß. 3. ±×¿ÍÁß fd1¿¡ ¶Ç connectÅëÁö°¡ ¿È. epoll_waitÇϰíÀÖ´ø ¶Ç´Ù¸¥ thread 1Àº ÀϾ¼ À§¿Í°°Àº Çڵ鸵Áß. 4. listenÁßÀÎ fd1¿¡ connect 2°³°¡ ÅëÁöµÊ. ÇöÀç epoll_wait ÇϰíÀÖ´Â ½º·¹µå´Â ¾øÀ½. 5. thread 0°ú thread 1ÀÇ À̺¥Æ®Ã³¸®´Â ³¡³². ´Ù½Ã epoll_waitÇÔ¼ö¸¦ ºÎ¸§.
ÀÌ·¸°ÔµÇ¸é µÑÁß ÇϳªÀÇ ½º·¹µå´Â blockÇϰԵdzª¿ä? ¾Æ´Ï¸é ½º·¹µå µÑ´Ù blockÇÏÁö¾Ê°í À̺¥Æ®¸¦ ó¸®ÇÏ·¯ ÀϾ³ª¿ä? Á¦°¡ À§»óȲ¿¡¼ ¾î¶»°ÔµÉÁö ±Ã±ÝÇÑÀÌÀ¯´Â ÀüÀÚó·³ epoll_waitÇϰíÀÖ´Â ½º·¹µå°¡ ¾øÀ»¶§ ÅëÁö°¡µÈ À̺¥Æ®µéÀÌ À̺¥Æ® Çϳª·Î ÇÕÃÄÁö¸é exclusiveÇ÷¡±×¸¦ »ç¿ëÇÑ ·ÎÁ÷µµ acceptó¸®ÇÒ¶§ ¸Å¹ø accept¿¡¼ eagainÀ» ¹ñÀ»¶§±îÁö È®ÀÎÇØ¾ßµÉ°Å°°Àºµ¥.. ÈÄÀÚ¶ó¸é Á¤¸» ÁÁ°ÚÁö¸¸ ¸¸¾à ÀüÀÚó·³ µÈ´Ù¸é ¹Ø¿¡ »óȲÀ» exclusive·Îµµ ÇÇÇÒ¼ö ¾ø´Â°Ç°¡¿ä?
1. listenÁßÀÎ fd1¿¡ ¿ÜºÎ·ÎºÎÅÍ connect½ÃµµÇß´Ù°í Ä¿³Î¿¡ ÅëÁöµÊ. 2. epoll_wait ÁßÀÎ 2°³ÀÇ ½º·¹µåÁß ÇϳªÀÇ ½º·¹µå (thread 0)ÀÌ ÀϾ¼ ó¸®Áß. 3. fd1¿¡ ¶Ç connect ÅëÁö. ÀÚ°íÀÖ´ø thread 1Àº ÀϾ. 4. ±×¿ÍÁß À̺¥Æ®Ã³¸®°¡ ³¡³ thread 0Àº eagainÀ» È®ÀÎÇØ¾ßµÇ±â¿¡ accept¸¦ È£Ãâ. ¾î¶ó? Çϳª´õÀÖ³×? ¶Ç´Ù½Ã ó¸®. 5. 3¿¡¼ ÀÏ¾î³ thread 1Àº ÀÏÀ»ÇϱâÀ§ÇØ accept¸¦ È£ÃâÇØº¸Áö¸¸ ÀÌ¹Ì thread 0ÀÌ ÀÚ±âÇÒÀÏÀ» »¯¾î°¨. ÀϾ´Âµ¥ ¾Æ¹«Àϵµ¾ÈÇÏ°í ´Ù½Ã ÀÚ·¯°¨.
ÀÌ·± µðÅ×ÀÏÇѺκÐÀº ¿µ¹Ì±Ç½ÎÀÌÆ®¸¦ µÚÁ®ºÁµµ ¾È³ª¿À¸é Á¦°¡ Á÷Á¢ ÄÚµåÂ¥¼ ½ÇÇèÇØºÁ¾ßµÇ´Âµ¥ ¸®´ª½º¸¦ wsl·Î óÀ½ Á¢ÇÑÁö ¾ó¸¶ ¾ÈµÇ¼ ½ÇÇèȯ°æÀ» ¸¸µé±âµµ ³Ê¹« ¹÷Â÷³×¿ä..(wsl ¸®´ª½º°¡ ¹öÀü 4.5¹Ì¸¸ÀΰÇÁö exclusiveÇ÷¡±×¸¦ Áö¿ø ¾ÈÇϴ°Ű°°í, IDEȯ°æ ¼³Á¤Çϱ⵵ Èûµé°í..)
±ä±Û ÀоîÁּż °¨»çÇÕ´Ï´Ù.
|