_ ºê¶óÀ̾𠱫Ã÷(Brian Goetz)
¾î·Á¿î º´·Ä ó¸® ÀÌ·ÐÀÌ ¾Æ´Ñ ¸ÖƼ½º·¹µå¸¦ »ç¿ëÇØ ÇÁ·Î±×·¥ÇÏ´Â ½Ç½À À§ÁÖÀÇ ±³À°À» ¹ÞÀº ÀûÀÌ ¾ø´ÂÁö¶ó, ´Ü¼øÇÏ°Ô ¸ÖƼ½º·¹µå·Î¸¸ µ¿ÀÛÇÏ´Â "Àڽİ°Àº" ÇÁ·Î±×·¥ÀÌ ¾Ë ¼ö ¾ø´Â ¿À·ù¸¦ »Ñ¸®¸é¼ °÷°÷¿¡¼ »¸¾î¹ö¸®´Â ¸ð½ÀÀ» º¸¸é Âü ¾ÈŸ±î¿ü½À´Ï´Ù (¿À·ù¶óµµ »Ñ¸®°í Á×À¸¸é ±×³ª¸¶ ´ÙÇàÀÔ´Ï´Ù). ¿¹Àü ¹öÀüÀÇ ÀÚ¹Ù´Â ¿î¿µÃ¼Á¦¸¶´Ù ½º·¹µåÀÇ µ¿ÀÛ ¸ð½ÀÀÌ ¸¹ÀÌ ´Þ¶ó¼ ¾î·Á¿î Á¡µµ ¸¹¾Ò½À´Ï´Ù. ¿î¿µÃ¼Á¦¸¶´Ù ´Ù¸¥ ½ºÄÉÁÙ¸µ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ Àü¹ÝÀûÀÎ ¼º´ÉÀ» ¶³¾î¶ß¸®¸é¼ ¾µ¸ð¾ø´Â I/O ±¸¹®À» Ãß°¡ÇÏ´Â ÀÛ¾÷µµ ¼½¿Ä¡ ¾Ê¾Ò½À´Ï´Ù. ÀÌÈÄ ½º·¹µå Ç®À» Àû¿ëÇØ ¼¹öÀÇ ¾ÈÁ¤¼ºÀ» Å©°Ô ³ô¿©ÁÖ°í, ½ºÇɶô(spin_lock)À» »ç¿ëÇß´ø ºÎºÐ¿¡ wait_notify ±¸Á¶¸¦ Àû¿ëÇØ CPU ºÎÇϸ¦ Å©°Ô ÁÙÀ̱⵵ Çß½À´Ï´Ù. ±×·¯´ø µµÁß¿¡ ÀÚ¹Ù5.0ÀÌ ¹ßÇ¥µÇ°í, º´·Ä ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ µµ±¸°¡ ¾öû³ª°Ô ¸¹ÀÌ Á¦°øµÇ±â ½ÃÀÛÇß½À´Ï´Ù. ¿©±âÀú±â ã¾Æº¸¸ç ¸¸µé°í ¾ÈÁ¤ÈÇÏ´À¶ó ¾Ö¸¦ ¸Ô¾ú´ø ½º·¹µå Ç®À» ¸Þ¼Òµå È£Ãâ ÇѹæÀ¸·Î ¸¸µé ¼ö ÀÖ¾úÀ¸¸ç, ÈξÀ ´Ù¾çÇÑ º´·Ä ÇÁ·Î±×·¡¹Ö ±â´ÉÀ» ´õ ¾ÈÁ¤ÀûÀ¸·Î Á¦°ø¹ÞÀ» ¼ö ÀÖ°Ô µÇ¾úÁÒ. ÀÌÁ¦ ¾î´À ÇÁ·Î±×·¥¿¡³ª ¸ÖƼ½º·¹µå ±¸Á¶¸¦ È°¿ëÇÏ´Â ÀÏÀº °ÅÀÇ ±âº»ÀÌ µÇ¾î°©´Ï´Ù. Á¦°¡ ¿äÁò ¸ÃÀº °³¹ß ¾÷¹«¿¡¼µµ ¿ÏÀüÈ÷ ¼·Î ´Ù¸¥ ºÐ¾ßÀÇ µ¿¶³¾îÁø ¸ñÇ¥¸¦ ÇâÇØ °³¹ßÇÏÁö¸¸, ¾î´À °÷ Çϳª ½º·¹µå¸¦ È°¿ëÇÏÁö ¾Ê´Â ÇÁ·ÎÁ§Æ®°¡ ¾ø½À´Ï´Ù. ¼¹ö¿¡¼´Â ÇÑÁ¤µÈ ÄÄÇ»ÅÍ ÀÚ¿øÀ» ÃÖ´ëÇÑ È°¿ëÇØ °¡Àå È¿À²ÀûÀ¸·Î ¼ºñ½º¸¦ Á¦°øÇÏ°íÀÚ ÇÏ°í, Ŭ¶óÀ̾ðÆ® PC¿¡¼´Â µ¿ÀûÀÎ ÀÎÅÍÆäÀ̽º¿Í ÇÔ²² ¸¹Àº Á¤º¸¸¦ ½Ç½Ã°£À¸·Î ¾ò°íÀÚ ÇÏÁÒ. ´Ü¼øÈ÷ ¾ð¾î¿Í °ü·ÃµÈ ¹®Á¦´Â ¾Æ´Õ´Ï´Ù. ÀÚ¹ÙÀÌ°Ç C#ÀÌ°Ç PHPÀÌ°Ç °£¿¡ Ç×»ó ¸ÖƼ½º·¹µå ȯ°æÀ» »ý°¢ÇØ¾ß ÇÕ´Ï´Ù. Á÷Á¢ ½º·¹µå¸¦ ¸¸µéÁö ¾Ê´õ¶óµµ ¿ÜºÎÀÇ ¾îµð¼±°¡ ¹Ýµå½Ã ½º·¹µå¸¦ »ç¿ëÇÏ´Â ºÎºÐÀÌ ÀÖ°Ô ¸¶·ÃÀÔ´Ï´Ù.
ÀÌ·± ½ÃÁ¡¿¡ ½º·¹µå¸¦ È°¿ëÇÑ º´·Ä 󸮿¡ ´ëÇÑ ½ÇÁ¦ÀûÀÎ ¿¹Á¦¿Í ÆÐÅÏÀ» Àû¿ëÇÑ »ç¿ë ¿¹¸¦ ¼Ò°³ÇÏ´Â ³Ê¹«³ª ¹Ý°¡¿î Ã¥ÀÌ ¹Ù·Î <(¸ÖƼÄھ 100% È°¿ëÇÏ´Â) ÀÚ¹Ù º´·Ä ÇÁ·Î±×·¡¹Ö>ÀÔ´Ï´Ù. º´·Ä ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ º¸ÅëÀº ÀÚ¹Ù5.0ºÎÅÍ Ãß°¡µÈ java.util.concurrent ÆÐÅ°Áö¿¡ ´ëÇÑ ¿©·¯ ¹®¼¸¦ º¸¸é¼ ´ëÃæ ÀÌÇØÇÏ°í »ç¿ëÇÏ°ï ÇÏÁö¸¸, <ÀÚ¹Ù º´·Ä ÇÁ·Î±×·¡¹Ö>Àº ÀÌ·± ±â´ÉÀ» ÃæºÐÈ÷ ÀÌÇØÇÑ »óÅ¿¡¼ È°¿ëÇϵµ·Ï µµ¿ÍÁÖ°í ÀÖ½À´Ï´Ù. ¾ÆÁÖ °£´ÜÇÑ Å¬·¡½º¸¦ ´ã´çÇØ °³¹ßÇÏ°í ÀÖ´Ù°í Çصµ, ÇØ´ç Ŭ·¡½º°¡ Å« ±Ô¸ðÀÇ ÇÁ·Î±×·¥¿¡¼ ±âº»ÀûÀÎ ºÎºÐÀ¸·Î ³Î¸® »ç¿ëµÈ´Ù¸é ÀÌ Ã¥¿¡¼ ¼Ò°³ÇÏ´Â ±â¹ýÀ» ÀûÀýÈ÷ Àû¿ëÇØ Àüü ÇÁ·Î±×·¥ÀÇ ¾ÈÀü¼ºÀ» È®º¸ÇÏ¸é¼ ¼º´ÉÀ» Å©°Ô ³ôÀÏ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í º´·Ä ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ±âÃʸ¦ ´ÙÁö°í ³ª¸é, ±âÁ¸¿¡ ÀØÀ»¸¸ Çϸé ÇÑ ¹ø¾¿ ¿À·ù¸¦ ¹ñ¾î³»¸é¼ ¹®Á¦°¡ »ý±â´ø ÇÁ·Î±×·¥¿¡ ¾î¶² ¿øÀÎÀÌ ÀÖÀ» ¼ö ÀÖ´ÂÁö ½±°Ô ÃßÀûÇÒ ¼öµµ ÀÖ½À´Ï´Ù. <ÀÚ¹Ù º´·Ä ÇÁ·Î±×·¡¹Ö>ÀÌ Àü¹®ÀûÀÎ À̷м´Â ¾Æ´ÏÁö¸¸, ÀÌ·ÐÀ» ¼ÒȦÇÏ°Ô ´Ù·çÁöµµ ¾Ê½À´Ï´Ù. ¶ÇÇÑ ÀÚ¹Ù ¾ð¾î¸¦ ±â¹ÝÀ¸·Î ÇÑ´Ù´Â °¡Á¤ÇÏ¿¡ ¾²¿©Áø Ã¥ÀÔ´Ï´Ù¸¸, ÀϹÝÀûÀÎ º´·Ä ó¸® ÀÌ·ÐÀ» Àû¿ëÇÑ ºÎºÐÀÌ ¸¹À¸¸ç Çϵå¿þ¾î³ª ½Ã½ºÅÛ ±¸Á¶¿Í °ü·ÃµÈ ºÎºÐµµ ÀûÁö ¾Ê±â ¶§¹®¿¡ ´Ù¸¥ ¾ð¾î¿¡µµ ½±°Ô Àû¿ëÇÒ ¼ö ÀÖ´Â ³»³»¿ëÀÌ ¸¹½À´Ï´Ù.
Âü°í·Î, ÀÌ Ã¥¿¡¼ "º´·Ä"À̶ó´Â ´Ü¾î·Î Ç¥½ÃÇÑ ³»¿ëÀÇ ´ëºÎºÐÀº "concurrent"¶ó´Â ¿µ¾î ´Ü¾î¸¦ ÀǹÌÇÕ´Ï´Ù. concurrentÀÇ ¶æÀº ƯÈ÷ ÄÄÇ»ÅÍ ¿ë¾î·Î ¾²ÀÏ ¶§ "µ¿½Ã¿¡ ½ÇÇàµÇ´Â ÄÚµåÀÇ È帧"À̶ó°í Ç®¾î ¾µ ¼ö ÀÖ°Ú½À´Ï´Ù. ¿ø·¡ "º´·Ä"Àº ÀϹÝÀûÀ¸·Î "parallel"À̶ó´Â ´Ü¾î¸¦ ¹ø¿ªÇÒ ¶§ ¸¹ÀÌ »ç¿ëÇÕ´Ï´Ù. ÇÏÁö¸¸ parallel°ú concurrent´Â ¾à°£ÀÇ ´µ¾Ó½º Â÷ÀÌ°¡ ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í ºñ½ÁÇÑ Àǹ̷Πº¼ ¼ö Àֱ⠶§¹®¿¡ "º´·Ä"À̶ó´Â ´Ü¾î¸¦ »ç¿ëÇß´Ù´Â Á¡À» ¾Ë¸³´Ï´Ù. |