IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

´ÙÁß ½º·¹µå ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¹ÖÀ» ½±°Ô
»ý»êÀÚ-¼ÒºñÀÚ ÇàÀ§¸¦ °£´ÜÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â Consumer Ŭ·¡½º

Joseph Hartal, ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ, GlobaLoop LTD
Ze'ev Bubis, ¼ÒÇÁÆ®¿þ¾î °³¹ßÆÀÀå, GlobaLoop LTD

2002³â 2¿ù

»ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À´Â ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼­ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â ±¸¼º °³³ä Áß ÇϳªÀÌ°í, ¿©±â¿¡ ¹®Á¦°¡ ÀÖ´Ù. »ý»êÀÚ-¼ÒºñÀÚ ÇàÀ§´Â ÇÑ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¿©·¯ ¹ø µÇÇ®ÀÌµÉ ¼ö Àֱ⠶§¹®¿¡ Äڵ嵵 ±×·¸°Ô µÉ ¼ö ÀÖ´Ù. ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚÀÎ Ze'ev Bubis¿Í Saffi Hartal´Â ConsumerŬ·¡½º¸¦ ¸¸µé¾ú´Âµ¥, ÀÌ Å¬·¡½º´Â ÀϺΠ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ÄÚµå Àç»ç¿ëÀ» ¿ëÀÌÇÏ°Ô ÇÏ°í ÄÚµå µð¹ö±ë°ú À¯Áöº¸¼ö¸¦ °£ÆíÇÏ°Ô ÇÏ¿© ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á ÇÑ´Ù.

´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀ̼ÇÀº Á¾Á¾ »ý»êÀÚ-¼ÒºñÀÚ ÇÁ·Î±×·¡¹Ö ½Ã³ª¸®¿À¸¦ »ç¿ëÇÑ´Ù. ÀÌ ½Ã³ª¸®¿À¿¡¼­´Â »ý»êÀÚ ½º·¹µå°¡ ¹Ýº¹ÀûÀÎ ÀÛ¾÷À» »ý¼ºÇÏ¿© ÀÛ¾÷ Å¥¿¡ º¸³»°í ¼ÒºñÀÚ ½º·¹µå°¡ À̸¦ óÇÑ´Ù. ÀÌ ÇÁ·Î±×·¡¹Ö ¸Þ¼Òµå´Â ¸Å¿ì À¯¿ëÇÏÁö¸¸ Á¾Á¾ Áߺ¹µÈ Äڵ带 ¸¸µé¾î ³»±âµµ Çϴµ¥, ÀÌ´Â µð¹ö±ë°ú À¯Áöº¸¼ö¿¡ ½ÇÁúÀûÀÎ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ°í ÄÚµå Àç»ç¿ëÀ» ¿øÇÒÇÏ°Ô Çϱâ À§ÇØ ¿ì¸®´Â Consumer Ŭ·¡½º¸¦ ¸¸µé¾ú´Ù. Consumer Ŭ·¡½º´Â ÀÛ¾÷ Å¥¿Í ¼ÒºñÀÚ ½º·¹µå¸¦ À§ÇÑ ¸ðµç ÄÚµå»Ó ¾Æ´Ï¶ó À̵éÀ» ¿¬°á½ÃÅ°´Â ³í¸®Àû Á¢ÂøÁ¦¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. ÀÌ´Â ¿ì¸®°¡ Áߺ¹ÀûÀÎ ÄÚµåÀÇ ÇàµéÀ» ÀÛ¼ºÇÏ´Â ´ë½Å ºñÁî´Ï½º ·ÎÁ÷ - ÀÛ¾÷ÀÌ ¾î¶»°Ô 󸮵Ǿî¾ß ÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÏ´Â °Í-¿¡ Æ÷Ä¿½º¸¦ ¸ÂÃâ ¼ö ÀÖµµ·Ï ÇØ ÁØ´Ù. ¶ÇÇÑ ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀ̼ÇÀÇ µð¹ö±ë ÀÛ¾÷À» ÈξÀ ½±°Ô ÇØÁØ´Ù.

ÀÌ ±Û¿¡¼­ ¿ì¸®´Â ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼­ ÀϹÝÀûÀÎ ½º·¹µå »ç¿ë¿¡ °üÇØ °£´ÜÈ÷ »ìÆ캸°í »ý»êÀÚ-¼ÒºñÀÚ ÇÁ·Î±×·¡¹Ö ½Ã³ª¸®¿À¿¡ °üÇØ ¼³¸íÇÏ°í Consumer Ŭ·¡½º°¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¸¦ º¸¿©ÁÖ´Â ½ÇÁ¦ ¼¼°èÀÇ ¿¹¸¦ °ËÅäÇÏ°Ú´Ù. ÀÌ ±ÛÀº ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀ̳ª »ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À¿¡ ´ëÇÑ ½Éµµ ±íÀº ¼Ò°³´Â ÇÏÁö ¾Ê´Â´Ù. ÀÌ ÁÖÁ¦µé¿¡ ´ëÇÑ ±Û ¸ñ·ÏÀº Âü°í ÀÚ·á ¸¦ ÂüÁ¶ÇÑ´Ù.

´ÙÁß ½º·¹µùÀÇ ±âº»

´ÙÁß ½º·¹µùÀº ¾ÖÇø®ÄÉÀ̼ÇÀÌ µ¿½Ã¿¡ ÇÑ °³ ÀÌ»óÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀ» ó¸®Çϵµ·Ï ÇÏ´Â ÇÁ·Î±×·¡¹Ö ±â¹ýÀÌ´Ù. ½º·¹µå´Â º¸Åë µÎ °³ÀÇ ´Ù¸¥ À¯ÇüÀÇ ´ÙÁß ½º·¹µå ÀÛ¾÷¿¡ äÅõȴÙ.:

  • Àû½Ã À̺¥Æ®, ƯÁ¤ ½Ã°£¿¡, ȤÀº ƯÁ¤ °£°ÝÀ¸·Î ÀÛ¾÷ÀÌ ¹ß»ýÇϵµ·Ï ½ºÄÉÁ층µÇ¾î¾ß ÇÒ ¶§
  • ¹é±×¶ó¿îµå ó¸®, ÇöÀçÀÇ ½ÇÇà È帧°ú º´ÇàÇÏ¿© ¹é±×¶ó¿îµå À̺¥Æ®¸¦ ó¸®Çϰųª ½ÇÇàÇØ¾ß ÇÒ ¶§

Àû½Ã À̺¥Æ®ÀÇ ¿¹·Î´Â ÇÁ·Î±×·¥ reminder, ŸÀÓ ¾Æ¿ô À̺¥Æ®, Æú¸µÀ̳ª refresh °°Àº ¹Ýº¹ ÀÛ¾÷À» µé ¼ö ÀÖ´Ù. ¹é±×¶ó¿îµå ó¸®ÀÇ ¿¹¿¡´Â Àü¼ÛÀ» ±â´Ù¸®´Â ÆÐŶÀ̳ª 󸮸¦ ±â´Ù¸®´Â ¼ö½Å ¸Þ½ÃÁöµîÀÌ ÀÖ´Ù.

»ý»êÀÚ-¼ÒºñÀÚ °ü°è

»ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À´Â ¹é±×¶ó¿îµå ó¸® ¹üÁÖ¿¡ ¼ÓÇÏ´Â °æ¿ì¿¡ ÀûÇÕÇÏ´Ù. ÀÌ »óȲµéÀº ÀϹÝÀûÀ¸·Î ÀÛ¾÷ "»ý»êÀÚ"Ãø°ú ÀÛ¾÷ "¼ÒºñÀÚ"ÃøÀ» Áß½ÉÀ¸·Î ¼øȯÇÑ´Ù. º´Çà 󸮵Ǵ ÀÛ¾÷¿¡ °üÇÑ ´Ù¸¥ °í·Á »çÇ×µµ ÀÖ´Ù. ´ëºÎºÐÀÇ °æ¿ì µ¿ÀÏÇÑ ÀÚ¿øÀ» »ç¿ëÇÏ´Â ÀÛ¾÷µéÀº ¸ÕÀú µé¾î¿Â ÀÛ¾÷ÀÌ ¸ÕÀú ¼­ºñ½º ¹Þ´Â ¹æ½ÄÀ¸·Î ¼øÂ÷ÀûÀ¸·Î 󸮵Ǿî¾ß Çϴµ¥, ÀÌ ¹æ½ÄÀº ´ÜÀÏ ½º·¹µåµÈ ¼ÒºñÀÚ¸¦ »ç¿ëÇÏ¿© ½±°Ô ¼öÇàµÉ ¼ö ÀÖ´Ù. ÀÌ ¹æ½ÄÀ» »ç¿ëÇÏ¿© ¿ì¸®´Â ÇÑ ÀÚ¿ø¿¡ Á¢±ÙÇÏ´Â ¿©·¯ ½º·¹µå ´ë½Å, ÇϳªÀÇ ÀÚ¿ø¿¡ Á¢±ÙÇÏ´Â ÇϳªÀÇ ½º·¹µå¸¦ ´Ù·é´Ù.

Ç¥ÁØ ¼ÒºñÀÚ¸¦ ±¸µ¿ÇÏ·Á¸é, µé¾î¿À´Â ¸ðµç ÀÛ¾÷À» ÀúÀåÇϱâ À§ÇØ ÀÛ¾÷ Å¥°¡ »ý¼ºµÈ´Ù. »ý»êÀÚ ½º·¹µå´Â 󸮵Ǿî¾ß ÇÏ´Â »õ·Î¿î °´Ã¼¸¦ °¡Á®¿Í ¼ÒºñÀÚÀÇ Å¥¿¡ Ãß°¡ÇÑ´Ù. ±×·¯¸é ¼ÒºñÀÚ ½º·¹µå´Â Å¥¿¡¼­ °¢ °´Ã¼¸¦ ²¨³»¾î Â÷·Ê·Î ó¸®ÇÑ´Ù. Å¥°¡ ºñ¿öÁö¸é ¼ÒºñÀÚ´Â ÈÞ¸é »óÅ·Π°£´Ù. »õ·Î¿î °´Ã¼°¡ ºó Å¥¿¡ Ãß°¡µÇ¸é ¼ÒºñÀÚ´Â ±ú¾î³ª¼­ °´Ã¼¸¦ ó¸®ÇÑ´Ù. ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¼øÂ÷ 󸮸¦ ¼±È£Çϱ⠴빮¿¡ ¼ÒºñÀÚ´Â º¸Åë ´ÜÀÏ ½º·¹µåÇüÀÌ´Ù.

¹®Á¦ : ÄÚµå Áߺ¹

»ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À´Â ¸Å¿ì ÀϹÝÀûÀ̱⠶§¹®¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇÒ ¶§ ¿©·¯ ¹ø µîÀåÇÏ°í, ±× °á°ú ÄÚµå Áߺ¹ÀÌ ¹ß»ýÇÑ´Ù. ¿ì¸®´Â »ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À¸¦ ¿©·¯ ¹ø äÅÃÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß ÇÁ·Î¼¼½º¿¡¼­ ÀÌ°ÍÀÌ ±Ù½É°Å¸®°¡ µÈ´Ù´Â »ç½ÇÀ» ¾Ë°Ô µÇ¾ú´Ù.

»ý»êÀÚ-¼ÒºñÀÚ ÇൿÀÌ Ã³À½ ÇÊ¿äÇÒ ¶§ ¿ì¸®´Â ÇϳªÀÇ ½º·¹µå¿Í ÇϳªÀÇ Å¬·¡½º¸¦ äÅÃÇÑ Å¬·¡½º¸¦ ÀÛ¼ºÇÏ¿© À̸¦ ±¸ÇöÇÏ¿´´Ù. µÎ¹ø°·Î ÇÊ¿äÇÒ ¶§ ¿ì¸®´Â óÀ½ºÎÅÍ ´Ù½Ã ÀÌ°ÍÀ» ±¸ÇöÇÏ·Á ÇßÁö¸¸ ÀÌÀü¿¡ ±¸ÇöÇß´Ù´Â »ç½ÇÀ» ¾Ë°Ô µÇ¾ú´Ù. ±×·¡¼­ Äڵ带 º¹»çÇÏ¿© °´Ã¼°¡ 󸮵Ǵ ¹æ½ÄÀ» ¼öÁ¤ÇÏ¿´´Ù. »ý»êÀÚ-¼ÒºñÀÚ ÇൿÀ» ¾ÖÇø®ÄÉÀ̼ǿ¡ ¼¼¹ø° ±¸ÇöÇßÀ» ¶§´Â ¿ì¸®°¡ ³Ê¹« ¸¹Àº Äڵ带 Áߺ¹½ÃÅ°°í ÀÖ´Ù´Â °ÍÀÌ ºÐ¸íÇØÁ³´Ù. ¿ì¸®´Â ¿ì¸®ÀÇ ¸ðµç »ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À¸¦ ó¸®ÇÒ Æ÷°ýÀûÀÎ Consumer Ŭ·¡½º°¡ ÇÊ¿äÇÏ´Ù°í °áÁ¤ÇÏ¿´´Ù.

¿ì¸®ÀÇ ¼Ö·ç¼Ç : Consumer Ŭ·¡½º

Consumer Ŭ·¡½º¸¦ ¸¸µé ¶§ ¿ì¸®ÀÇ ¸ñÀûÀº ¾ÖÇø®ÄÉÀÌ¼Ç ³»ÀÇ ¸ðµç »ý»êÀÚ-¼ÒºñÀÚ ÀνºÅϽº¿¡ ´ëÇØ »õ·Î¿î ÀÛ¾÷ Å¥¿Í ¼ÒºñÀÚ ½º·¹µå¸¦ ÀÛ¼ºÇÒ ¶§ ¼ö¹ÝµÇ´Â ÄÚµå Áߺ¹ ¹®Á¦¸¦ ¾ø¾Ö´Â °ÍÀ̾ú´Ù. ÀûÀýÇÑ Consumer Ŭ·¡½º°¡ ÀÖÀ¸¸é ¿ì¸®´Â ÀÛ¾÷ 󸮿¡ ±¹ÇÑµÈ Äڵ常 ÀÛ¼ºÇÏ¸é µÈ´Ù (ºñÁî´Ï½º ·ÎÁ÷). ±×·¯¸é Äڵ尡 ±ò²ûÇØÁö°í À¯Áö º¸¼ö°¡ ½¬¿öÁö¸ç º¯°æ¿¡ ´õ À¯¿¬ÇØÁø´Ù.

Consumer Ŭ·¡½º¿¡ ´ëÇÑ ¿ì¸®ÀÇ ¿ä±¸ »çÇ×Àº ¾Æ·¡¿Í °°´Ù.:

  • Àç»ç¿ë : ¿ì¸®´Â ¸ðµç °ÍÀ» °¡Áø Ŭ·¡½º¸¦ ¿øÇÏ¿´´Ù. ½º·¹µå, Å¥ ¹× À̵éÀ» ¿¬°á½ÃÅ°´Â ¸ðµç ·ÎÁ÷ÀÌ ±×°ÍÀÌ´Ù. ±×·¯¸é ¿ì¸®´Â Å¥ÀÇ Æ¯Á¤ ÀÛ¾÷À» ó¸®ÇÏ´Â Äڵ常 ÀÛ¼ºÇÏ¸é µÉ °ÍÀÌ´Ù. (¿¹¸¦ µé¾î, onConsume(ObjectjobToBeConsumed)À̶ó´Â ¸Þ¼Òµå´Â Consumer Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇØ ¿À¹ö·ÎµåµÉ °ÍÀÌ´Ù.)
  • Å¥ ¼±Åà : ¿ì¸®´Â Å¥ ±¸ÇöÀ» Consumer °´Ã¼°¡ »ç¿ëÇϵµ·Ï ¼³Á¤ÇÒ ¼ö Àֱ⸦ ¿øÇÏ¿´´Ù. ±×·¯³ª ÀÌ°ÍÀº ¿ì¸®°¡ Å¥°¡ ½º·¹µå¿¡ ¾ÈÀüÇÔÀ» º¸ÁõÇØ¾ß Çϰųª ¼ÒºñÀÚ ÀÛ¾÷°ú »óÃæµÇÁö ¾ÊÀ» ´ÜÀÏ ½º·¹µåµÈ »ý»êÀÚ¸¦ »ç¿ëÇØ¾ß ÇÔÀ» ÀǹÌÇÑ´Ù. ¾ç °æ¿ì ¸ðµÎ, ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ÀÚ½ÅÀÇ ¸Þ¼Òµå¿¡ Á¢±ÙÇÏ´Â °ÍÀ» Çã°¡Çϵµ·Ï Å¥¸¦ ¼³°èÇØ¾ß ÇÑ´Ù.
  • ¼ÒºñÀÚ ½º·¹µå ¿ì¼± ¼øÀ§ ¼³Á¤ : ¿ì¸®´Â ConsumerÀÇ ½º·¹µå°¡ ½ÇÇàµÉ ¿ì¼± ¼øÀ§¸¦ ¼³Á¤ÇÒ ¼ö Àֱ⸦ ¿øÇÏ¿´´Ù.
  • ¼ÒºñÀÚ ½º·¹µå ¸í¸íÇϱâ : ½º·¹µå°¡ ÀÇ¹Ì ÀÖ´Â À̸§À» °¡Áö´Â °ÍÀÌ Æí¸®ÇÏ°í, ºÐ¸íÈ÷ µð¹ö±ë¿¡µµ µµ¿òÀÌ µÈ´Ù. ¿¹¸¦ µé¾î, ¿©·¯ºÐÀÌ ÀÚ¹Ù °¡»ó ¸Ó½Å¿¡ ½ÅÈ£¸¦ º¸³»¸é °¡»ó ¸Ó½ÅÀº ¸ðµç ½º·¹µå¿Í ±×¿¡ »óÀÀÇÏ´Â ½ºÅà Ʈ·¹À̽ºÀÇ ½º³À¼¦ÀÎ Àüü ½º·¹µå ´ýÇÁ¸¦ ¸¸µé¾î³¾ °ÍÀÌ´Ù. ÀÌ ½º·¹µå ´ýÇÁ¸¦ À©µµ¿ì Ç÷§Æû¿¡ »ý¼ºÇÏ·Á¸é ¿©·¯ºÐÀº ÀÚ¹Ù ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ°í ÀÖ´Â À©µµ¿ì¿¡¼­ <ctrl><break>¸¦ ´©¸£°Å³ª À©µµ¿ìÀÇ Close ¹öÆ°À» Ŭ¸¯ÇØ¾ß ÇÑ´Ù. Àüü ½º·¹µå ´ýÇÁ¸¦ »ç¿ëÇØ ÀÚ¹Ù ¼ÒÇÁÆ®¿þ¾î ¹®Á¦¸¦ Áø´ÜÇÏ´Â ¹æ¹ý¿¡ °üÇÑ »ó¼¼ Á¤º¸´Â Âü°í ÀڷḦ ÂüÁ¶ÇÑ´Ù.

Ŭ·¡½º ÄÚµå

Listing 1¿¡¼­¿Í °°ÀÌ, À§´Â getThread()¸Þ¼Òµå¿¡ ConsumerÀÇ ½º·¹µå¸¦ »ý¼ºÇϱâ À§ÇØ "lazy creation"À» »ç¿ëÇÏ¿´´Ù.:

Listing 1. ConsumerÀÇ ½º·¹µå »ý¼ºÇϱâ

     /**
       * Lazy creation of the Consumer's thread.
       *
       * @return  the Consumer's thread
       */
      private Thread getThread()
      {
         if (_thread==null)
         {
            _thread = new Thread()
            {
               public void run()
               {
                  Consumer.this.run();
               }
            };
         }
         return _thread;

Listing 2¿¡¼­¿Í °°ÀÌ, ½º·¹µåÀÇ run()¸Þ¼Òµå´Â ConsumerÀÇ run() ¸Þ¼Òµå¸¦ ½ÇÇà½ÃÅ°´Âµ¥, ÀÌ°ÍÀÌ ÁÖ ¼ÒºñÀÚ ·çÇÁÀÌ´Ù. :

Listing 2. The run() method is the main Consumer loop

     /**
       *  Main Consumer's thread method.
       */
      private void run()
      {
         while (!_isTerminated)
         {
            // job handling loop
            while (true)
            {
               Object o;
               synchronized (_queue)
               {
                  if (_queue.isEmpty())
                     break;
                  o = _queue.remove();
               }
               if (o == null)
                  break;
               onConsume(o);
            }

            // if we are not terminated and the queue is still empty
            // then wait until new jobs arrive.

            synchronized(_waitForJobsMonitor)
            {
               if (_isTerminated)
                  break;
               if(_queue.isEmpty())
               {
                  try
                  {
                     _waitForJobsMonitor.wait();
                  }
                  catch (InterruptedException ex)
                  {
                  }
               }
            }
         }
}// run()

±âº»ÀûÀ¸·Î, ConsumerÀÇ ½º·¹µå´Â ´õ ÀÌ»ó Å¥¿¡¼­ ´ë±âÇÏ´Â ÀÛ¾÷ÀÌ ¾øÀ» ¶§±îÁö ½ÇÇàµÈ´Ù. ±× ÈÄ ÈÞ¸é »óÅ·Π°¡¼­ add(Object)¿¡ ´ëÇÑ Ã¹¹ø° È£ÃâÀÌ ÀÖÀ» ¶§ ±ú¾î³­´Ù. add(Object)´Â Å¥¿¡ ½Å±Ô ÀÛ¾÷À» Ãß°¡ÇÏ°í ½º·¹µå¸¦ "Â÷¼­" ±ú¿î´Ù.

"ÈÞ¸é"°ú "Â÷±â"´Â wait()¿Í notify() ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇØ ¼öÇàµÈ´Ù. ½ÇÁ¦ ¼ÒºñÀÚ ÀÛ¾÷Àº Listing 3¿¡ ³ª¿Í ÀÖ´Â °Í°ú °°ÀÌ OnConsume(Object) ¸Þ¼Òµå¿¡ ÀÇÇØ Ã³¸®µÈ´Ù.:

Listing 3. ¼ÒºñÀÚ ±ú¿ì±â ¹× ÅëÁöÇϱâ

     /**
      * Add an object to the Consumer.
      * This is the entry point for the producer.
      * After the item is added, the Consumer's thread
      * will be notified.
      *
      * @param  the object to be 'consumed' by this consumer
      */
      public void add(Object o)
      {
         _queue.add(o);
         kickThread();
      }

      /**
       * Wake up the thread (without adding new stuff to consume)
       *
       */
      public void kickThread()
      {
         if (!this._thread.isInterrupted())
         {
            synchronized(_waitForJobsMonitor)
            {
               _waitForJobsMonitor.notify();
            }
         }
      }

¿¹Á¦ : MessagesProcessor

Consumer Ŭ·¡½º°¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¸¦ º¸¿© ÁÖ±â À§ÇØ °£´ÜÇÑ ¿¹¸¦ µé°Ú´Ù. MessagesProcessor Ŭ·¡½º´Â µµÂøÇÏ´Â ¸Þ½ÃÁö¸¦ ºñµ¿±âÀûÀ¸·Î (Áï È£Ãâ ½º·¹µå¸¦ ¹æÇØÇÏÁö ¾Ê°í) ó¸®ÇÑ´Ù . ÀÌ Å¬·¡½ºÀÇ ÀÛ¾÷Àº µé¾î¿À´Â °¢ ¸Þ½ÃÁö¸¦ ÀμâÇÏ´Â °ÍÀÌ´Ù. MessagesProcessor´Â µµÂøÇÏ´Â ¸Þ½ÃÁö ÀÛ¾÷À» ´Ù·ç´Â ³»ºÎ Consumer¸¦ Æ÷ÇÔÇÑ´Ù. Listing 3¿¡¼­¿Í °°ÀÌ, »õ·Î¿î ÀÛ¾÷ÀÌ ºó Å¥¿¡ µé¾î ¿À¸é Consumer´Â processMessage(String) ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© À̸¦ ó¸®Çϵµ·Ï ÇÑ´Ù.:

Listing 4. MessagesProcessor Ŭ·¡½º

      class MessagesProcessor
      {
         String _name;
         // anonymous inner class that supplies the consumer
         // capabilities for the MessagesProcessor
         private Consumer _consumer = new Consumer()
         {
            // that method is called on each event retrieved
            protected void onConsume(Object o)
            {
               if (!(o instanceof String))
               {
                  System.out.println("illegal use, ignoring");
                  return;
               }
               MessagesProcesser.this.processMessage((String)o);
            }
         }.setName("MessagesProcessor").init();

         public void gotMessageEvent(String s)
         {
            _consumer.add(s);
         }
         private void processMessage(String s)
         {
            System.out.println(_name+" processed message: "+s);
         }

         private void terminate()
         {
           _consumer.terminateWait();
           _name = null;
         }

         MessagesProcessor()
         {
            _name = "Example Consumer";
         }
      }

À§ÀÇ Äڵ忡¼­ º¼ ¼ö ÀÖµíÀÌ, Consumer¸¦ Ä¿½ºÅ͸¶ÀÌ¡ÇÏ´Â °ÍÀº ¸Å¿ì °£´ÜÇÏ´Ù. À͸íÀÇ ³»ºÎ Ŭ·¡½º¸¦ ÅÃÇØ Consumer Ŭ·¡½º¸¦ È®ÀåÇÏ°í Ãß»ó ¸Þ¼ÒµåÀÎ onConsume()¸¦ ¿À¹ö·ÎµåÇÏ¸é µÈ´Ù. À̸®ÇÏ¿© ¿ì¸® ¿¹Á¦¿¡¼­ °£´ÜÈ÷ processMessage¸¦ È£ÃâÇÑ´Ù.

Ŭ·¡½ºÀÇ °í±Þ ±â´Éµé

¿ì¸®°¡ Ãâ¹ß½Ã ¿øÇß´ø ±âº» ¿ä±¸»çÇ׿¡ µ¡ºÙ¿© ¿ì¸®´Â Consumer Ŭ·¡½º¿¡ ¸î °¡Áö À¯¿ëÇÑ °í±Þ ±â´ÉÀ» Á¦°øÇÏ¿´´Ù.

À̺¥Æ® ÅëÁö

  • onThreadTerminate(): ÀÌ ¸Þ¼Òµå´Â Consumer°¡ Á¾·áµÇ±â Á÷Àü¿¡ È£ÃâµÈ´Ù. ¿ì¸®´Â ÀÌ ¸Þ¼Òµå¸¦ µð¹ö±ë ¸ñÀûÀ¸·Î ¿À¹ö¶óÀ̵åÇÑ´Ù.

  • goingToRest(): ÀÌ ¸Þ¼Òµå´Â Consumer ½º·¹µå°¡ ÈÞ¸é »óÅ·Π°¡±â Á÷Àü¿¡ È£ÃâµÈ´Ù (Áï _waitForJobsMonitor.wait() È£Ãâ Á÷Àü). Consumer°¡ ÈÞ¸é »óÅ·Π°¡±â Á÷Àü¿¡ ÀÏ´ÜÀÇ Ã³¸®µÈ ÀÛ¾÷À» Çڵ鸵ÇØ¾ß ÇÏ´Â º¹ÀâÇÑ °æ¿ì¿¡ ÀÌ·¯ÇÑ ÅëÁö°¡ ÇÊ¿äÇÒ ¼ö ÀÖ´Ù.

Á¾·á

  • terminate(): Consumer ½º·¹µåÀÇ ºñµ¿±âÀû Á¾·á

  • terminateWait(): Consumer ½º·¹µå°¡ ½ÇÁ¦·Î Á¾·áµÉ ¶§±îÁö È£Ãâ ½º·¹µå¸¦ ´ë±â »óÅ·Π¼³Á¤ÇÑ´Ù. .

¿ì¸® ¿¹Á¦¿¡¼­ ¸¸¾à terminateWait() ´ë½Å terminate()¸¦ »ç¿ëÇß´Ù¸é ¹®Á¦°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. _name ÀÌ null °ªÀ¸·Î ¼³Á¤µÈ ÈÄ onConsume() ¸Þ¼Òµå°¡ È£ÃâµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×·¯¸é processMessage¸¦ ½ÇÇà½ÃÅ°´Â ½º·¹µå°¡ NullPointerExceptionÀ» º¸³»°Ô µÉ °ÍÀÌ´Ù.

°á·Ð : Consumer Ŭ·¡½ºÀÇ ÀåÁ¡

Consumer Ŭ·¡½ºÀÇ ¼Ò½º¸¦ Âü°í ÀÚ·á ¼½¼Ç¿¡¼­ ´Ù¿î·Îµå¹ÞÀ» ¼ö ÀÖ´Ù. ÀÌ ¼Ò½º¸¦ ÀÚÀ¯·Ó°Ô »ç¿ëÇÏ°í ¿©·¯ºÐÀÌ ÇÊ¿äÇÑ´ë·Î È®Àå½ÃÅ°±â ¹Ù¶õ´Ù. ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼­ ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÒ ¶§ÀÇ ÀÌÁ¡Àº ´ÙÀ½°ú °°´Ù.:

  • ÄÚµå Àç»ç¿ë/Áߺ¹ ÄÚµå Á¦°Å : Consumer Ŭ·¡½º¸¦ °¡Áö°í ÀÖ´Ù¸é ¿©·¯ºÐ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ðµç ÀνºÅϽº¿¡ ´ëÇØ »õ·Î¿î ¼ÒºñÀÚ¸¦ ÀÛ¼ºÇÏÁö ¾Ê¾Æµµ µÈ´Ù. »ý»êÀÚ-¼ÒºñÀÚ ½Ã³ª¸®¿À°¡ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡ ¾ó¸¶³ª ÀÚÁÖ µîÀåÇÏ´ÂÁö¸¦ »ý°¢Çϸé ÀÌ Å¬·¡½º´Â ¾öû³­ ½Ã°£À» Àý¾àÇØ ÁØ´Ù. ¶ÇÇÑ Áߺ¹µÈ ÄÚµå´Â ¹ö±×¿¡°Ô´Â ºñ¿ÁÇÑ ¶¥°úµµ °°´Ù´Â °ÍÀ» ±â¾ïÇϱ⠹ٶõ´Ù. ±×¸®°í Áߺ¹ ÄÚµå´Â ±âº»ÀûÀÎ ÄÚµå À¯Áöº¸¼ö¸¦ ´õ¿í ¾î·Æ°Ô ÇÑ´Ù.

  • ¹ö±× °¨¼Ò : °ËÁõµÈ ÄÚµåÀÇ »ç¿ëÀº ¹ö±× ¹æÁö¿¡ ÁÁÀºµ¥, ƯÈ÷ ´ÙÁß ½º·¹µåµÈ ¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ù·ê ¶§ ±×·¯ÇÏ´Ù. Consumer Ŭ·¡½º´Â ÀÌ¹Ì µð¹ö±ëµÇ¾ú±â ¶§¹®¿¡ ´õ ¾ÈÀüÇÏ´Ù. Consumer Ŭ·¡½º´Â ¶ÇÇÑ ½º·¹µå¿Í ÀÚ¿ø°£¿¡ ¾ÈÀü Áß°³ÀÚ ¿ªÇÒÀ» ÇÔÀ¸·Î½á ½º·¹µå °ü·Ã ¹ö±×¸¦ ¹æÁöÇÑ´Ù. Consumer´Â ´Ù¸¥ ½º·¹µåµéÀ» ´ë½ÅÇؼ­ ÀÚ¿øµé¿¡ ¼øÂ÷ÀûÀ¸·Î Á¢±ÙÇÑ´Ù.

  • ÈǸ¢ÇÏ°í ±ò²ûÇÑ ÄÚµå : Consumer Ŭ·¡½º¸¦ »ç¿ëÇϸé ÀÌÇØ¿Í À¯Áöº¸¼ö°¡ ´õ¿í ½¬¿î, º¸´Ù °£´ÜÇÑ Äڵ带 ÀÛ¼ºÇϵµ·Ï ÇØÁØ´Ù. Consumer Ŭ·¡½º¸¦ »ç¿ëÇÏÁö ¾ÊÀ» °æ¿ì ¿ì¸®´Â µÎ °³ÀÇ ´Ù¸¥ ±â´ÉÀ» ó¸®ÇÏ´Â Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. : ¼Òºñ ·ÎÁ÷ (Å¥¿Í ½º·¹µå °ü¸®, µ¿±âÈ­µî)°ú ¼ÒºñÀÚÀÇ ¿ëµµ³ª ±â´ÉÀ» ÁöÁ¤ÇØ ³õÀº Äڵ尡 ±×°ÍÀÌ´Ù.

ÀÌ ±ÛÀÇ ÀÛ¼º¿¡ µµ¿òÀ» ÁֽŠAllot CommunicationsÀÇ Jonathan Lifton°ú Dov Trietsch¿¡°Ô °¨»ç¸¦ Ç¥ÇÕ´Ï´Ù.

Âü°í ÀÚ·á

¸ñ Â÷:
´ÙÁß ½º·¹µùÀÇ ±âº»
»ý»êÀÚ - ¼ÒºñÀÚ °ü°è
¹®Á¦Á¡
¿ì¸®ÀÇ ¼Ö·ç¼Ç
Ŭ·¡½º ÄÚµå
¿¹Á¦
°í±Þ ±â´Éµé
°á·Ð
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
´ÙÁß ½º·¹µåµÈ ÀÚ¹Ù ¾ÖÇø®ÄÉÀÌ¼Ç ÀÛ¼ºÇϱâ
µ¿±âÈ­´Â ÀûÀÌ ¾Æ´Ï´Ù
°æÀï ÁÙÀ̱â
¶§·Î´Â °øÀ¯ÇÏÁö ¾Ê´Â °ÍÀÌ ÃÖ¼±
Subscribe to the developerWorks newsletter
US ¿ø¹® Àбâ
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
ÇÊÀÚ ¼Ò°³
Photo of Joseph Hartal Joseph (Saffi) Hartal´Â GlobaLoop LTDÀÇ ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚÀÌ´Ù. Tel-Aviv ´ëÇп¡¼­ ÄÄÇ»ÅÍ °úÇÐ ¹× ¼öÇÐ Çлç ÇÐÀ§¿Í MBA¸¦ ¹Þ¾Ò´Ù. Áö³­ 10³â°£ ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ·Î ÀÏÇØ ¿À¸é¼­ C++¿¡ ½Ç½Ã°£À¸·Î ÀÓº£µðµåµÇ´Â ÄÚµå¿Í Àڹ٠Ŭ¶óÀ̾ðÆ® ¹× ¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ¿´´Ù. Saffi´Â ´ëºÎºÐÀÇ ½Ã°£À» ÀÎÇÁ¶ó ÄÚµå ÀÛ¼º°ú ¼ö¼ö²²³¢ Ç®±â·Î º¸³½´Ù.


Photo of Zeev Bubis Ze'ev Bubis´Â GlobaLoop LTDÀÇ ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚÀÌ´Ù. Tel-Aviv ´ëÇп¡¼­ ÄÄÇ»ÅÍ °úÇÐ ¹× ¼öÇÐ Çлç ÇÐÀ§¸¦ ¹Þ¾Ò´Ù. Áö³­ 10³â°£ ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ·Î ÀÏÇØ ¿À¸é¼­ ´Ù¾çÇÑ Ç÷§Æû°ú ¾ð¾î¸¦ ´ë»óÀ¸·Î ÇÏ´Â ¼ÒÇÁÆ®¿þ¾î ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ¿´´Ù. ÃÖ±Ù 3³â°£ Ze'ev´Â ÀÚ¹Ù¿¡¼­ Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ǰú ¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇϴµ¥ Æ÷Ä¿½º¸¦ ¸ÂÃß¾î ¿Ô´Ù.

ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³ÀÎÁ¤º¸ º¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ