::: °­ÁÂ/¼Ò½º/¹®¼­ :::

°­ÁÂ/¼Ò½º/¹®¼­ ¼º°Ý¿¡ ¸ÂÁö ¾Ê´Â ±¤°í,ºñ¹æ,Áú¹®ÀÇ ±ÛÀº Áï½Ã »èÁ¦Çϸç
³»¿ëÀ» º¹»çÇÏ¿© »ç¿ëÇÒ °æ¿ì ¹Ýµå½Ã À̰÷(http://www.howto.pe.kr)À» Ãâó·Î ¸í½ÃÇÏ¿© ÁÖ¼¼¿ä


Category

  ±è¿µ´ë(2003-07-17 16:34:55, Hit : 10500, Vote : 2189
 [Âü°í] ´ÙÁß¿¬°á(multiple sockets) ¼­¹öÀÇ ±¸Çö¹æ¹ý Á¾·ù

// Á¦   ¸ñ: ´ÙÁß¿¬°á(multiple sockets) ¼­¹öÀÇ ±¸Çö¹æ¹ý Á¾·ù
// ÀÛ¼ºÀÚ: ±è¿µ´ë( http://www.howto.pe.kr )

1) fork
   .´ÙÁß¿¬°á ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ °Íº¸´Ù´Â ÀϹÝÀûÀÎ ½Ã½ºÅÛ ÇÁ·Î±×·¥¿¡ »ç¿ëµÇ´Â ±â¹ýÀ¸·Î,
    ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö¿¡ È®´ë½ÃÄѼ­ »ç¿ëÇѰÍÀÌ´Ù.
   .ÇϳªÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ó¸®ÇÏ´Ù°¡ ¹®Á¦°¡ »ý°Üµµ ÇØ´ç ÇÁ·Î¼¼½º¿¡°Ô¸¸ ¿µÇâÀ» ³¢Ä¡¹Ç·Î Àüü ¼­ºñ½º¿¡
    ÁöÀåÀÌ »ý±æ ¿°·Á°¡ ÁÙ°í, ÇÁ·Î±×·¡¹Ö ¿ª½Ã select, poll, thread ¸¦ »ç¿ëÇϴ°Ϳ¡ ºñÇØ¼­ °£´ÜÇϸç
    µð¹ö±ëÀÌ ¿ëÀÌÇÏ´Ù¶ó´Â ÀåÁ¡ÀÌ ÀÖ´Ù.
   .´ÜÁ¡Àº ÀÚ½ÄÇÁ·Î¼¼½º¸¦ »ý¼ºÇϴµ¥ ¸¹Àº ½Ã°£°ú ÀÚ¿øÀÌ ¼Ò¸ðµÇ¸ç(ÀÀ´ä¼Óµµ ÀúÇÏ), ¾î´ÀÁ¤µµ ÀÌ»óÀÇ
    ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ »ý¼º½ÃÄ×À» ¶§ Unix ¹öÀü¿¡ µû¶ó ´Ù¸£Áö¸¸ »ý¼ºµÇ´Â ÇÁ·Î¼¼½ºÀÇ ¼ö¿¡ Á¦ÇÑÀÌ ÀÖ´Ù.
    Æ¯È÷ httpd ¿Í °°ÀÌ ¼¼¼ÇÀÌ ÂªÀº(¸îÃÊÀ̳») °æ¿ì´Â ¹®Á¦ ¾øÁö¸¸ ¼¼¼ÇÀÌ ±æ´Ù¸é »ý¼ºµÇ´Â ÇÁ·Î¼¼½ºÀÇ
    ¼ö¿¡ ¸¹Àº Á¦ÇÑÀÌ ÀÖÀ»°ÍÀÌ´Ù. ±×¸®°í »ý¼ºµÈ ÇÁ·Î¼¼½º°£ÀÇ ³»ºÎ Åë½ÅÀ» À§ÇØ IPC »ç¿ëÀÌ ºÒ°¡ÇÇÇÏ¿©
    IPC ·Î ÀÎÇÑ ÇÁ·Î±×·¥ÀÇ º¹Àâµµ¿Í ½Ã½ºÅÛÄÝ »ç¿ëÀÇ ºÎÇϸ¦ °¨´çÇØ¾ß ÇÑ´Ù.

2) select()
   .fork ¿Í °°ÀÌ ÀÚ½ÄÇÁ·Î¼¼½º¸¦ »ý¼ºÇÏ´Â ¹æ¹ýÀÌ ¾Æ´Ñ ÇÑ ÇÁ·Î¼¼½º³»¿¡¼­ ÀüºÎ 󸮵ǹǷΠÇÁ·Î¼¼½º
    »ý¼º½Ã ¹ß»ýÇÏ´Â ºÎÇϸ¦ ÁÙÀÏ ¼ö ÀÖÀ¸¸ç IPC ¸¦ »ç¿ëÇÒ Çʿ䰡 ¾ø´Ù.
   .´ÜÁ¡Àº ¸¹Àº socket connection À» ÇÑ ÇÁ·Î¼¼½º°¡ ó¸®ÇØ¾ß ÇϹǷΠÇϳªÀÇ request 󸮵¿¾È ´Ù¸¦
    request µéÀº ÀüºÎ ´ë±âÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î request¿¡ ´ëÇÑ Ã³¸®°¡ ºü¸¥°æ¿ì(¿¹¸¦µé¾î äÆÃ)¸¸
    »ç¿ëÇØ¾ß ÇÑ´Ù. ¹«¾ùº¸´Ù °¡Àå Å« ´ÜÁ¡Àº select ´Â ±âº»ÀûÀ¸·Î FD_SET ÀÇ °¢ ºñÆ®¸¦ üũÇÏ¿©
    socket ¿¡ À̺¥Æ®°¡ ¹ß»ýÇß´ÂÁö °Ë»çÇϴµ¥ À̰ÍÀÇ ±æÀ̰¡ 1024 ÀΰÍÀÌ ¹®Á¦ÀÌ´Ù. Áï ÇϳªÀÇ FD_SET
    Àº 1024 °³¼öÀÇ socket ¸¸ ó¸®ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ±× ÀÌ»óÀÎ °æ¿ì´Â FD_SETSIZE ¸¦ ¼öÁ¤ÇÏ¿© °¹¼ö¸¦
    ´Ã¸± ¼ö ´Â ÀÖÁö¸¸ FD_SETSIZE ´Â Ç¥ÁØ ¶óÀ̺귯¸®¸¦ ¼öÁ¤ÇÏ´Â °á°úÀ̹ǷΠ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù.
    ±×·¯¹Ç·Î 1024 °³¼ö ÀÌ»óÀÎ °æ¿ì¶ó¸é FD_SET À» ¿©·¯ °³ »ç¿ëÇÏ¿© ó¸®ÇÑ´Ù.

3) poll()
   .select ¿Í ºñ½ÁÇÏ´Ù. ´Ù¸¥Á¡À̶ó¸é selectÀÇ FD_SETÀÇ 1024 Á¦ÇÑÀÌ ¾øÀ¸¸ç select ¿¡¼­´Â 3°¡Áö
    event¸¦ °Ë»çÇÏÁö¸¸ poll Àº 6°¡ÁöÀÇ event ¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù. ´ÜÁ¡Àº socket °³¼ö¸¸Å­ poll
    ±¸Á¶Ã¼¸¦ ¸¸µé¾î¾ß ÇϹǷΠ¸Þ¸ð¸® ³¶ºñ°¡ select() ¿¡ ºñÇØ ½ÉÇÏ´Ù. ¼º´ÉÀº select() º¸´Ù´Â ÁÁ´Ù

4) thread
   . PTHREAD_SCOPE_PROCESS ¿Í PTHREAD_SCOPE_SYSTEM ÀÇ »ç¿ë¿¡ µû¶ó Àå´ÜÁ¡ÀÌ ¸¹ÀÌ ´Ù¸£Áö¸¸
    ¸¹Àº ÀÚ¿øÀ» °øÀ¯ÇÏ¿© IPC¸¦ »ç¿ëÇÏÁö ¾Ê´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ÇϳªÀÇ ¾²·¹µå°¡ À߸ø µ¿ÀÛÇÏ¿© Á״°æ¿ì
    ÇÁ·Î¼¼½º³»ÀÇ ¸ðµç ¾²·¹µå°¡ ¿µÇâÀ» ¹Þ´Â´Ù.

5) ºñµ¿±âI/O ½Ã±×³Î(SIGIO)
   . socket ¿¡ ºñµ¿±â I/O½ÅÈ£°¡ ÀÖÀ»¶§ Ä¿³Î·ÎºÎÅÍ SIGIO ½Ã±×³ÎÀ» ¹ÞÀ» ¼ö ÀÖµµ·Ï ÇÏ´Â ¹æ¹ýÀÌ´Ù.
    signal(SIGIO, ½Ã±×³Îó¸®ÇÔ¼ö); ·Î ½Ã±×³Îó¸®ÇÔ¼ö¸¦ ÁöÁ¤ÇÑ ÈÄ fcntl(¼ÒÄÏ, F_SETFL, O_SYNC); ·Î
    ¼ÒÄÏÀ» ÁöÁ¤ÇÑ´Ù. À̰ÍÀº Ä¿³Î·ÎºÎÅÍ Á÷Á¢ ½Ã±×³ÎÀ» ¹ÞÀ¸¹Ç·Î ÀÌ¿¡ ´ëÇÑ ¹ÝÀÀÀ» »¡¸® ÇÒ ¼ö ÀÖÁö¸¸
    ¿©·¯ °³ÀÇ socket¿¡ ´ëÇØ µ¿½Ã¿¡ »ç¿ëµÈ´Ù¸é ½Ã±×³Î(SIGIO) ¹ß»ýÈÄ ½Ã±×³Î ó¸®ÇÔ¼ö°¡ È£ÃâµÉ ¶§
    ¾î¶² ¼ÒÄÏ¿¡¼­ ¹ß»ýÇß´ÂÁö ¾Ë ¼ö ¾ø´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ÀÌ¿¡ ÃÖ±Ù¿¡´Â ½Ã±×³Î¿¡ fd(file descriptor)¸¦
    ½ÇÀ» ¼ö ÀÖ´Â Posix Real-Time ½Ã±×³ÎÀÌ ¿¬±¸µÇ°í ÀÖ´Ù.

6) preforking
   . Ưº°ÇÑ API ÇÔ¼ö°¡ ÀÖ´Â °ÍÀº ¾Æ´Ï°í socket()->bind()->listen()->fork()->accept() ¼ø¼­·Î ÁøÇàµÇ¾î
     µ¿ÀÏÇÑ IP/Port ·Î fork() ÇÑ ¿©·¯ ÇÁ·Î¼¼½º°¡ ³ª´©¾î(round robin) accept() ÇÏ´Â ¹æ½ÄÀÌ´Ù
     Apache °¡ ´ëÇ¥ÀûÀÎ ±¸Çö»ç·Ê·Î ¼º´É¸é¿¡¼­ ¿ùµîÇÏ´Ù. ÇÏÁö¸¸ BSD °è¿­µéÀº TCP/IP Ä¿³Î¿¡¼­
     Á÷Á¢ round robin À¸·Î accept() ¸¦ ó¸®ÇØ ÁÖÁö¸¸ ÀϹÝÀûÀÎ UNIX µéÀº lock(file lock, system wide
     mutex lock) À» »ç¿ëÇÏ¿© ±¸ÇöµÈ´Ù.

7) /dev/poll (Solaris Ç¥ÁØ, Linux ´Â patch ÇÊ¿ä)
   .Linux/Solaris ÀÇ °æ¿ì´Â Áö¿øµÇ³ª ´Ù¸¥ UNIX µéÀº Áö¿ø ºÒºÐ¸í

8) Posix Real-Time Signal
   .ÇöÀç ¿¬±¸ ÁøÇàµÇ´Â ±â¼ú

9) kqueue (FreeBSD Ç¥ÁØ)
   .FreeBSD ¿¡¸¸ ±¸ÇöµÇ¾î ÀÖÀ¸¸ç ¼º´É¸é¿¡¼­ °¡Àå ¿ùµîÇÏ´Ù


* ¼º´Éºñ±³
On a 167MHz sun4u Sparc Ultra-1 running SunOS 5.7 (Solaris 7) Generic_106541-11:

     pipes    100    1000   10000
     select    151       -       -
      poll    470     676    3742
  /dev/poll     61      70      92


On a 4X400Mhz Enterprise 450 running Solaris 8 (results contributed by Doug Lea):

     pipes    100    1000   10000
     select     60       -       -
      poll    273     388    1559
  /dev/poll     27      28      34


On an idle 650 MHz dual Pentium III running Red Hat Linux 6.2 with kernel 2.2.14smp plus the /dev/poll patch plus Dave Miller's patch to speed up close():

     pipes    100    1000   10000
     select     28       -       -
      poll     23     890   11333
  /dev/poll     19     146    4264


On a single processor 600Mhz Pentium-III with 512MB of memory, running FreeBSD 4.x-STABLE (results contributed by Jonathan Lemon):

     pipes    100    1000    10000   30000
     select     54       -        -       -
      poll     50     552    11559   35178
   kqueue      8       8        8       8





8   [³×Æ®¿öÅ©/º¸¾È] [Âü°í] TCP ¿¡¼­ »ç¿ëµÇ´Â È¿À²Çâ»ó ¾Ë°í¸®Áò  ±è¿µ´ë 2004/07/16 10327 2047
7   [³×Æ®¿öÅ©/º¸¾È] [Âü°í] TCP ¿¡¼­ »ç¿ëµÇ´Â ³»ºÎ ŸÀÌ¸Ó  ±è¿µ´ë 2004/07/13 10200 1870
6   [³×Æ®¿öÅ©/º¸¾È] [°­ÁÂ] ucd-snmp ¼³Ä¡  ±è¿µ´ë 2003/11/29 8796 1724
5   [³×Æ®¿öÅ©/º¸¾È] [¼Ò½º] ºñµ¿±â timeout read()/write()  ±è¿µ´ë 2003/07/29 7531 1701
  [³×Æ®¿öÅ©/º¸¾È] [Âü°í] ´ÙÁß¿¬°á(multiple sockets) ¼­¹öÀÇ ±¸Çö¹æ¹ý Á¾·ù  ±è¿µ´ë 2003/07/17 10500 2189
3   [³×Æ®¿öÅ©/º¸¾È] [¼Ò½º] ¸ÖƼij½ºÆ®¸¦ ÀÌ¿ëÇÑ Ã¤ÆÃ ÇÁ·Î±×·¥  ±è¿µ´ë 2003/03/19 11020 2009
2   [³×Æ®¿öÅ©/º¸¾È] [¼Ò½º] °£´ÜÇÑ Ã¤ÆÃ Ŭ¶óÀ̾ðÆ®/¼­¹ö  ±è¿µ´ë 2003/03/13 11966 1810
1   [³×Æ®¿öÅ©/º¸¾È] [¼Ò½º] Multi Chatting Server  ±è¿µ´ë 2003/03/12 8054 1678

1
 

Copyright 1999-2021 Zeroboard / skin by zero