"Programming Server-Side Applications" ÆäÀÌÁöÀÇ º¯°æ ³»¿ª

³É³¯À§Å° ÆäÀÌÁö¸ñ·Ï º¯°æ³»¿ª ȯ°æ¼³Á¤ ·Î±×ÀÎ °Ë»ö: Home


ÇöÀç ¹öÀü . . . . 2013-6-24 2:39 pm ¼öÁ¤ÇÑ »ç¶÷: ³É³¯
552 ¹ø° ¼öÁ¤º» . . . . 2013-6-19 1:14 am ¼öÁ¤ÇÑ »ç¶÷: 177.67.199.xxx [<a href="http://drugstorg.com/levitra-professional-r.html">levitra professional online</a>]
551 ¹ø° ¼öÁ¤º» . . . . 2013-6-19 1:13 am ¼öÁ¤ÇÑ »ç¶÷: 177.67.199.xxx [<a href="http://drugstorg.com/levitra-professional-r.html">levitra professional 20 mg</a>]
550 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 10:03 pm ¼öÁ¤ÇÑ »ç¶÷: 118.97.95.xxx [<a href="http://drugstorg.com/levitra-super-force-r.html">levitra super force</a>]
549 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 7:01 pm ¼öÁ¤ÇÑ »ç¶÷: 116.228.55.xxx [<a href="http://drugstorg.com/levitra-oral-jelly-r.html">levitra oral jelly india</a>]
548 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 4:00 pm ¼öÁ¤ÇÑ »ç¶÷: 122.96.59.xxx [<a href="http://drugstorg.com/levitra-soft-r.html">levitra soft</a>]
547 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 12:59 pm ¼öÁ¤ÇÑ »ç¶÷: 220.132.19.xxx [<a href="http://drugstorg.com/vigora-r.html">vigora 100</a>]
546 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 12:58 pm ¼öÁ¤ÇÑ »ç¶÷: 109.73.4.xxx [<a href="http://drugstorg.com/vigora-r.html">vigora 100 review</a>]
545 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 7:27 am ¼öÁ¤ÇÑ »ç¶÷: 202.96.154.xxx [<a href="http://drugstorg.com/viagra-r.html">viagra dosage</a>]
544 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 4:33 am ¼öÁ¤ÇÑ »ç¶÷: 59.44.146.xxx [<a href="http://drugstorg.com/trial-packs-r.html">trial packs viagra</a>]
543 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 4:33 am ¼öÁ¤ÇÑ »ç¶÷: 61.135.179.xxx [<a href="http://drugstorg.com/trial-packs-r.html">trial packs for antivirus</a>]
542 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 1:40 am ¼öÁ¤ÇÑ »ç¶÷: 212.138.144.xxx [<a href="http://drugstorg.com/cialis-super-active-r.html">cialis super active</a>]
541 ¹ø° ¼öÁ¤º» . . . . 2013-6-18 1:40 am ¼öÁ¤ÇÑ »ç¶÷: 1.224.39.xxx [<a href="http://drugstorg.com/cialis-super-active-r.html">cialis super active plus</a>]
540 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 10:34 pm ¼öÁ¤ÇÑ »ç¶÷: 218.108.170.xxx [<a href="http://drugstorg.com/tadacip-r.html">tadacip online</a>]
539 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 7:31 pm ¼öÁ¤ÇÑ »ç¶÷: 121.78.237.xxx [<a href="http://drugstorg.com/viagra-super-active-r.html">viagra super active 100mg</a>]
538 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 7:30 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://drugstorg.com/viagra-super-active-r.html">viagra super active plus online</a>]
537 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 4:23 pm ¼öÁ¤ÇÑ »ç¶÷: 194.44.31.xxx [<a href="http://drugstorg.com/silagra-r.html">silagra 100 mg</a>]
536 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 1:33 pm ¼öÁ¤ÇÑ »ç¶÷: 190.52.124.xxx [<a href="http://drugstorg.com/female-viagra-r.html">female viagra online</a>]
535 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 10:41 am ¼öÁ¤ÇÑ »ç¶÷: 202.98.123.xxx [<a href="http://drugstorg.com/levitra-r.html">levitra generic</a>]
534 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 8:01 am ¼öÁ¤ÇÑ »ç¶÷: 122.96.59.xxx [<a href="http://drugstorg.com/kamagra-oral-jelly-r.html">kamagra oral jelly</a>]
533 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 2:55 am ¼öÁ¤ÇÑ »ç¶÷: 218.108.170.xxx [<a href="http://drugstorg.com/tadalis-sx-r.html">tadalis sx cheap</a>]
532 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 2:54 am ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://drugstorg.com/tadalis-sx-r.html">tadalis sx buy</a>]
531 ¹ø° ¼öÁ¤º» . . . . 2013-6-17 12:06 am ¼öÁ¤ÇÑ »ç¶÷: 218.108.170.xxx [<a href="http://drugstorg.com/suhagra-r.html">suhagra review</a>]
530 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 9:03 pm ¼öÁ¤ÇÑ »ç¶÷: 190.52.124.xxx [<a href="http://drugstorg.com/kamagra-soft-r.html">kamagra soft tabs reviews</a>]
529 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 6:05 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://drugstorg.com/eriacta-r.html">eriacta sildenafil citrate</a>]
528 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 6:05 pm ¼öÁ¤ÇÑ »ç¶÷: 95.141.44.xxx [<a href="http://drugstorg.com/eriacta-r.html">eriacta 100 generic viagra</a>]
527 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 3:04 pm ¼öÁ¤ÇÑ »ç¶÷: 116.228.68.xxx [<a href="http://drugstorg.com/cialis-soft-r.html">cialis soft tabs online</a>]
526 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 12:08 pm ¼öÁ¤ÇÑ »ç¶÷: 122.49.30.xxx [<a href="http://drugstorg.com/cialis-r.html">cialis price</a>]
525 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 12:04 pm ¼öÁ¤ÇÑ »ç¶÷: 61.55.141.xxx [<a href="http://drugstorg.com/cialis-r.html">cialis dosage</a>]
524 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 9:14 am ¼öÁ¤ÇÑ »ç¶÷: 202.108.251.xxx [<a href="http://drugstorg.com/caverta-r.html">caverta review</a>]
523 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 9:14 am ¼öÁ¤ÇÑ »ç¶÷: 118.97.95.xxx [<a href="http://drugstorg.com/caverta-r.html">caverta online</a>]
522 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 6:34 am ¼öÁ¤ÇÑ »ç¶÷: 201.85.50.xxx [<a href="http://drugstorg.com/apcalis-oral-jelly-r.html">apcalis oral jelly india</a>]
521 ¹ø° ¼öÁ¤º» . . . . 2013-6-16 6:33 am ¼öÁ¤ÇÑ »ç¶÷: 61.55.141.xxx [<a href="http://drugstorg.com/apcalis-oral-jelly-r.html">apcalis oral jelly buy</a>]
520 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 11:19 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/viagra-soft-e.html">viagra soft generico</a>]
519 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 8:18 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/viagra-e.html">viagra en ligne</a>]
518 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 8:18 pm ¼öÁ¤ÇÑ »ç¶÷: 61.55.141.xxx [<a href="http://p-france.com/viagra-e.html">viagra</a>]
517 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 5:29 pm ¼öÁ¤ÇÑ »ç¶÷: 94.200.252.xxx [<a href="http://p-france.com/cialis-super-active-e.html">cialis super active 20mg</a>]
516 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 2:31 pm ¼öÁ¤ÇÑ »ç¶÷: 62.148.146.xxx [<a href="http://p-france.com/viagra-super-active-e.html">viagra super active</a>]
515 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 2:30 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/viagra-super-active-e.html">viagra super active generic</a>]
514 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 11:30 am ¼öÁ¤ÇÑ »ç¶÷: 113.146.139.xxx [<a href="http://p-france.com/silagra-e.html">silagra 100 mg</a>]
513 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 11:30 am ¼öÁ¤ÇÑ »ç¶÷: 109.73.4.xxx [<a href="http://p-france.com/silagra-e.html">silagra 100 review</a>]
512 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 8:44 am ¼öÁ¤ÇÑ »ç¶÷: 115.25.216.xxx [<a href="http://p-france.com/levitra-e.html">levitra</a>]
511 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 8:43 am ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/levitra-e.html">levitra vidal</a>]
510 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 6:09 am ¼öÁ¤ÇÑ »ç¶÷: 177.75.186.xxx [<a href="http://p-france.com/kamagra-oral-jelly-e.html"> acheter kamagra oral jelly</a>]
509 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 3:35 am ¼öÁ¤ÇÑ »ç¶÷: 124.133.254.xxx [<a href="http://p-france.com/kamagra-e.html">kamagra pas cher</a>]
508 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 3:35 am ¼öÁ¤ÇÑ »ç¶÷: 114.80.91.xxx [<a href="http://p-france.com/kamagra-e.html">kamagra fast</a>]
507 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 12:56 am ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/tadalis-sx-e.html">tadalis sx reviews</a>]
506 ¹ø° ¼öÁ¤º» . . . . 2013-6-15 12:55 am ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/tadalis-sx-e.html">tadalis sx 20mg</a>]
505 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 10:17 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/kamagra-soft-e.html">kamagra soft tabs 100 mg</a>]
504 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 10:17 pm ¼öÁ¤ÇÑ »ç¶÷: 218.108.170.xxx [<a href="http://p-france.com/kamagra-soft-e.html">kamagra soft uk</a>]
503 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 7:32 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/eriacta-e.html">eriacta</a>]
502 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 7:32 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/eriacta-e.html">eriacta - 100 mg</a>]
501 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 4:47 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/cialis-soft-e.html">cialis soft en france</a>]
500 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 2:01 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://p-france.com/cialis-e.html">cialis en ligne</a>]
499 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 2:00 pm ¼öÁ¤ÇÑ »ç¶÷: 78.40.176.xxx [<a href="http://p-france.com/cialis-e.html">cialis ou viagra</a>]
498 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 11:07 am ¼öÁ¤ÇÑ »ç¶÷: 115.25.216.xxx [<a href="http://p-france.com/caverta-e.html">caverta ranbaxy</a>]
497 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 8:28 am ¼öÁ¤ÇÑ »ç¶÷: 211.167.64.xxx [<a href="http://p-france.com/apcalis-oral-jelly-e.html">apcalis oral jelly sachet</a>]
496 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 5:56 am ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://s-france.com/viagra-soft-y.html">viagra soft generico</a>]
495 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 5:56 am ¼öÁ¤ÇÑ »ç¶÷: 202.104.154.xxx [<a href="http://s-france.com/viagra-soft-y.html">viagra soft tabs- generika</a>]
494 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 3:21 am ¼öÁ¤ÇÑ »ç¶÷: 101.226.74.xxx [<a href="http://s-france.com/viagra-y.html">viagra forum</a>]
493 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 12:34 am ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://s-france.com/cialis-super-active-y.html">cialis super active france</a>]
492 ¹ø° ¼öÁ¤º» . . . . 2013-6-14 12:33 am ¼öÁ¤ÇÑ »ç¶÷: 218.108.170.xxx [<a href="http://s-france.com/cialis-super-active-y.html">cialis super active forum</a>]
491 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 9:22 pm ¼öÁ¤ÇÑ »ç¶÷: 59.44.146.xxx [<a href="http://s-france.com/viagra-super-active-y.html">viagra super active generic</a>]
490 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 9:21 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://s-france.com/viagra-super-active-y.html">viagra super active france</a>]
489 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 6:41 pm ¼öÁ¤ÇÑ »ç¶÷: 114.80.91.xxx [<a href="http://s-france.com/silagra-y.html">silagra avis</a>]
488 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 6:40 pm ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://s-france.com/silagra-y.html">silagra side effects</a>]
487 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 8:25 am ¼öÁ¤ÇÑ »ç¶÷: 122.96.59.xxx [<a href="http://s-france.com/levitra-y.html">levitra vidal</a>]
486 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 8:24 am ¼öÁ¤ÇÑ »ç¶÷: 110.173.0.xxx [<a href="http://s-france.com/levitra-y.html">levitra avis</a>]
485 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 6:05 am ¼öÁ¤ÇÑ »ç¶÷: 60.195.251.xxx [<a href="http://s-france.com/kamagra-oral-jelly-y.html">kamagra oral jelly pharmacie</a>]
484 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 3:33 am ¼öÁ¤ÇÑ »ç¶÷: 114.80.91.xxx [<a href="http://s-france.com/kamagra-y.html">kamagra doctissimo</a>]
483 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 3:33 am ¼öÁ¤ÇÑ »ç¶÷: 218.189.88.xxx [<a href="http://s-france.com/kamagra-y.html">kamagra oral jelly</a>]
482 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 12:45 am ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://s-france.com/tadalis-sx-y.html">tadalis sx20</a>]
481 ¹ø° ¼öÁ¤º» . . . . 2013-6-13 12:45 am ¼öÁ¤ÇÑ »ç¶÷: 221.10.102.xxx [<a href="http://s-france.com/tadalis-sx-y.html">tadalis sx prezzo</a>]
480 ¹ø° ¼öÁ¤º» . . . . 2013-6-12 9:54 pm ¼öÁ¤ÇÑ »ç¶÷: 78.93.120.xxx [<a href="http://s-france.com/kamagra-soft-y.html">kamagra soft tabs suppliers</a>]
479 ¹ø° ¼öÁ¤º» . . . . 2013-6-12 9:54 pm ¼öÁ¤ÇÑ »ç¶÷: 121.9.214.xxx [<a href="http://s-france.com/kamagra-soft-y.html">kamagra soft</a>]
478 ¹ø° ¼öÁ¤º» . . . . 2013-6-12 7:09 pm ¼öÁ¤ÇÑ »ç¶÷: 218.85.135.xxx [<a href="http://s-france.com/eriacta-y.html">eriacta 100 tablets</a>]
477 ¹ø° ¼öÁ¤º» . . . . 2013-6-12 7:09 pm ¼öÁ¤ÇÑ »ç¶÷: 221.10.102.xxx [<a href="http://s-france.com/eriacta-y.html">eriacta</a>]
476 ¹ø° ¼öÁ¤º» . . . . 2013-6-12 1:28 pm ¼öÁ¤ÇÑ »ç¶÷: 198.1.99.xxx [<a href="http://s-france.com/cialis-y.html">cialis france</a>]
475 ¹ø° ¼öÁ¤º» . . . . 2013-6-12 10:44 am ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://s-france.com/caverta-y.html">caverta review</a>]
474 ¹ø° ¼öÁ¤º» . . . . 2013-6-12 10:44 am ¼öÁ¤ÇÑ »ç¶÷: 116.228.55.xxx [<a href="http://s-france.com/caverta-y.html">caverta</a>]
473 ¹ø° ¼öÁ¤º» . . . . 2013-6-12 7:59 am ¼öÁ¤ÇÑ »ç¶÷: 125.39.225.xxx [<a href="http://s-france.com/apcalis-oral-jelly-y.html">apcalis oral jelly side effects</a>]
472 ¹ø° ¼öÁ¤º» . . . . 2013-6-9 12:56 pm ¼öÁ¤ÇÑ »ç¶÷: ³É³¯
 

º¯°æ»çÇ× (°¡Àå ÃÖ±ÙÀÇ "ÀϹÝÀûÀÎ ¼öÁ¤"ºÎÅÍ) (´Ù¸¥ º¯°æ»çÇ× ¾øÀ½)

-1 +1,330
- <a href="http://drugstorg.com/levitra-professional-r.html">levitra professional online</a>
+ = Programming Server-Side Applications for Windows 2000 =
+ by Jeffrey Richter & Jason D. Clark
+
+ == Chapter One: Te Discipline of Service Development ==
+
+ === Scalability and Perfomance ===
+ * Å©¸®Æ¼Ä༽¼ÇÀ» ¾µ ¼ö ÀÖÀ¸¸é ±×°É ½á¶ó. (Mutex¸¦ ÀÌ¿ëÇÑ ¶óÅ·: 1000 CPU Clock. Critical SectionÀ» ÀÌ¿ëÇÑ ¶óÅ·: 100 CPU Clock)
+ * Scalability: ½Ì±Û ¸Ó½Å¿¡¼­ ½ÇÇàµÇ´Â ¼­¹öÀÇ °æ¿ì, RAMÀ» µÎ ¹è ´Ã·È´Ù°í »ý°¢ÇßÀ» ¶§, ¼º´ÉÀÌ 2¹è °³¼±µÇ¸é scalability °¡ ÁÁÀº °ÍÀÌ´Ù. ¼º´ÉÀÌ 0.2 ¹è °³¼±µÇ¸é scalability °¡ ³ª»Û °ÍÀÌ´Ù.
+
+ ¼­¹ö ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§ ¿°µÎÇØ µÎ¾î¾ß Çϴ °Í:
+ * user-mode ¿Í kernel-mode °£ÀÇ ÀüȯÀÌ Àß ÀϾÁö ¾Ê°Ô Â¥°í Àִ°¡?
+ * cacheÀÇ ¿ë·®À» ÃÊ°úÇÏ¿© ¸Þ¸ð¸®¸¦ ¾ï¼¼½ºÇÏ°í ÀÖÁö´Â ¾ÊÀº°¡?
+ * º¯¼ö¸¦ ÀûÀýÈ÷ Á¤·ÄÇÏ°í Àִ°¡?
+ * ½Ã½ºÅÛ ÀÚ¿ø ¼Ò¸ð¸¦ ÁÙÀ̱â À§Çؼ­ ½º·¹µåÁúÀ» ÇÏ°í Àִ°¡?
+ * ¾µ¸ð¾ø´Â ÄÁÅؽºÆ® ½ºÀ§ÄªÀ» ÁÙÀ̱â À§ÇØ ½ÇÇàµÇ´Â ½º·¹µåÀÇ ¼ö¸¦ ÁÙÀÌ°í Àִ°¡?
+ * device I/O ÀÛ¾÷ÀÌ ¿Ï·áµÇ±â¸¦ ±â´Ù¸®´Â µ¿¾È ½º·¹µå°¡ À¯¿ëÇÑ ÀÏÀ» ÇÏ°í Àִ°¡?
+ * Windows ÇÔ¼öÀÇ ÆÛÆ÷¸Õ½º¸¦ Çâ»óÇϱâÀ§ÇØ ANSI ¹®ÀÚ¿­ ´ë½Å À¯´ÏÄڵ带 ¾²°í Àִ°¡?
+ * Windows °¡ Á¦°øÇϴ (¸ÚÁø?) ±â´ÉÀ» Àß »ç¿ëÇÏ°í Àִ°¡?
+
+ == Chapter Two: DEVICE I/O AND INTERTHREAD COMMUNICATION ==
+
+ * '''I/O completion port''' : ½º·¹µå¿¡¼­ i/o request °¡ Ã³¸®µÇ±â¸¦ ±â´Ù¸®´Â µ¿¾È, ¸¶³É ±â´Ù¸®´Â °ÍÀÌ ¾Æ´Ï¶ó ¾µ¹ýÇÑ ÀÏÀ» ÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ, Áï ¸ÖƼ½º·¹µù ¼º´ÉÀ» Çâ»ó ½ÃÅ°±âÀ§ÇØ Microsoft°¡ °³¹ßÇÑ i/o Ã³¸® ±â¼ú.
+
+ * Windows 2000 kernel ¿¡ Æ÷ÇԵȠjob object ´Â i/o completion port ¿Í »óÈ£ Çùµ¿Çϸç i/o °ü·Ã notificationÀ» ¼öÇàÇØ ÁØ´Ù.
+
+ * I/O completion port ´Â º»µð i/o device ¿Í °ü·ÃÇؼ­¸¸ ¾²À̴ °ÍÀ̾úÀ¸³ª, ÀÌÁ¦´Â Á» ´õ Å« ±Ô¸ð·Î ¹ßÀüÇÏ¿© interthread communication and device I/O ¸¦ À§ÇÑ ¸ÞÄ¿´ÏÁòÀÌ µÇ¾ú´Ù.
+
+
+ === Opening and Closing Devices ====
+
+ * À̠å¿¡¼­ Á¤ÀÇÇÑ device: '''ÆÄÀÏ'''(File, Directory, Logical disk drive, Physical disk drive), '''Æ÷Æ®'''(Serial port, Parallel port), '''Åë½Å'''(Mailslot, Named Pipe, Anonymous pipe, Socket), Console
+
+ * Device Open:  
+
+ || '''Device''' || '''Creational Functiion''' ||
+ || File || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/fileio/filesio_7wmd.htm' target=_blank>CreateFile</a></html>("c:\test.txt") ||
+ || Directory || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/fileio/filesio_7wmd.htm' target=_blank>CreateFile</a></html>("c:\Program Files", ..., FILE_FLAG_BACKUP_SEMANTICS) ||
+ || Logical disk drive || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/fileio/filesio_7wmd.htm' target=_blank>CreateFile</a></html>( "\\.\C:" ) ||
+ || Physical disk drive || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/fileio/filesio_7wmd.htm' target=_blank>CreateFile</a></html>( "\\.\PHYSICALDRIVE0" ) ||
+ || Serial Port || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/fileio/filesio_7wmd.htm' target=_blank>CreateFile</a></html>( "COM1" ) ||
+ || Parallel port || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/fileio/filesio_7wmd.htm' target=_blank>CreateFile</a></html>( "LPT1" ) ||
+ || Mailslot server || CreateMailslot( "\\.\mailslot\mailslotname" ) ||
+ || Mailslot client || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/fileio/filesio_7wmd.htm' target=_blank>CreateFile</a></html>( "\\servername\mailslot\mailslotname" ) ||
+ || Named pipe server || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/ipc/pipes_4w6d.htm' target=_blank>CreateNamedPipe</a></html>( "\\.\pipe\pipename" ) ||
+ || Named pipe client || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/fileio/filesio_7wmd.htm' target=_blank>CreateFile</a></html>( "\\servername\\pipe\pipename" ) ||
+ || Anonymous pipe || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/ipc/pipes_43j9.htm' target=_blank>CreatePipe</a></html> client and server ||
+ || Socket || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/winsock/wsapiref_2qr6.htm' target=_blank>socket</a></html>(), <html><a href='ms-help://MS.VSCC/MS.MSDNVS/winsock/wsapiref_13aq.htm' target=_blank>accept</a></html>(), <html><a href='ms-help://MS.VSCC/MS.MSDNVS/winsock/wsapiref_17jm.htm' target=_blank>AcceptEx</a></html>() ||
+ || Console || <html><a href='ms-help://MS.VSCC/MS.MSDNVS/dllproc/conchar_93n6.htm' target=_blank>CreateConsoleScreenBuffer</a></html>(), or <html><a href='ms-help://MS.VSCC/MS.MSDNVS/dllproc/conchar_7k9x.htm' target=_blank>GetStdHandle</a></html>() ||
+
+ * Device Close : CloseHandle( handle ) ¶Ç´Â closesocket( sock ) (¼ÒÄÏÀÇ °æ¿ì´Â CloseHandle·Î ´ÝÀ¸¸é ¾ÈµÊ)
+
+ * ÇÚµéÀǠŸÀÔÀ» ¾Ë¾Æ³»·Á¸é : DWORD GetFileType( HANDLE hDevice )
+
+ ==== A Detailed Look at CreateFile ====
+
+ * File ÀÌ¿ÜÀÇ device ¸¦ ¿­¶§¿¡´Â dwCreationDistribution ÆĶó¹ÌÅÍ¿¡ OPEN_EXISTING À» ÁÖ¾î¾ß¸¸ ÇØ.
+
+ * CreateFile Cache Flags
+ ** '''FILE_FLAG_NO_BUFFERING''' : ½Ã½ºÅÛÀÇ cache manager °¡ ÇØ´ç ÆÄÀÏÀ» Ä³½¬ÇÏÁö ¾Êµµ·Ï ÇÔ. (ÀÌ °æ¿ì ½Ã½ºÅÛÀº »ç¿ëÀÚ°¡ Á¦°øÇÑ ¹öÆÛ¿¡ Á÷Á¢ µ¥ÀÌÅ͸¦ ´ã±×±â ¶§¹®¿¡ offset À̳ª ¹öÆÛ»çÀÌÁî´Â ¹Ýµå½Ã sector sizeÀÇ Á¤¼ö¹è¿©¾ß ÇÑ´Ù) ´Ü, ¾öû³ª°Ô Å« »çÀÌÁîÀÇ ÆÄÀÏÀ» ¿©´Â °æ¿ì¿¡´Â ÀÌ Ç÷¢À» »ç¿ëÇϴ °ÍÀÌ ÁÁ´Ù.
+ ** '''FILE_FLAG_SEQUENTIAL_SCAN / FILE_FLAG_RANDOM_ACCESS''' : Ä³½¬¸Å´ÏÁ®°¡ ¾ÕÀ¸·Î ÀÐÀ» ³»¿ëÀ» ¹Ì¸® ÀÐÀ½ / ÀÐÁö ¾ÊÀ½
+ ** '''FILE_FLAG_WRITE_THROUGH''' : read cache ´Â µ¿ÀÛ, write cache ´Â ÀÛµ¿ÇÏÁö ¾Ê°í µð½ºÅ©¿¡ ¹Ù·Î ¾¸. (Àå¾Ö¿¡ ÀÇÇÑ µ¥ÀÌÅÍ ¼Õ½ÇÀ» ÃÖ´ëÇÑ ¸·À» ¼ö ÀÖÀ½.)
+
+ * Miscellaneous CreateFile Flags
+ ** '''FILE_FLAG_DELETE_ON_CLOSE''' : ÈǸ¢Çϱº. ¸ðµç ÇÚµéÀÌ close µÇ¸é ÆÄÀÏ »èÁ¦.
+ ** '''FILE_FLAG_BACKUP_SEMANTICS''' : ¹é¾÷±ÇÇÑÀ»°¡Áø »ç¿ëÀڴ ¿ÀÇ°¡´É. '''µð·ºÅ丮¸¦ ¿ÀÇ°¡´É'''
+ ** '''FILE_FLAG_POSIX_SEMANTICS''' : ÆÄÀϸíÀ» ´ë¼Ò¹®ÀÚ ±¸º°ÇÔ.
+ ** '''FILE_FLAG_OPEN_REPARSE_POINT''' : ÆÄÀÏÀÇ repase attribute ¸¦ ÀÛµ¿½ÃÅ°Áö ¾Ê°í ÆÄÀÏÀ» ¿°. (ºñÃßõ)
+ ** '''FILE_FLAG_OPEN_NO_RECALL''' : ÆÄÀÏÀÇ data ¸¦ offline storage(TAPEµî) ¿¡ ¸¸µéµµ·Ï ÇÔ.
+ ** <font color=red>'''FILE_FLAG_OVERLAPPED'''</font> : device ¿¡ asynchronous ÇÏ°Ô Á¢±ÙÇÒ °ÍÀÓÀ» ÁöÁ¤ÇÔ. (±âº»°ªÀº synchronous ÇÔ) '''ÀÌ°ÍÀ̾߸»·Î, ¿ì¸®°¡ ¼­¹ö ÆÛÆ÷¸Õ½º¸¦ Çâ»ó½ÃÅ°±â À§ÇØ ½á¾ß Çϴ °ÍÀÓ!!'''
+
+ * File Attribute Flags
+ ** FILE_ATTRIBUTE_HIDDEN µîµî
+ ** '''FILE_ATTRIBUTE_TEMPORARY''' : ¸Þ¸ð¸®¿¡¼­ ÆÄÀÏÀ» Á¶ÀÛ. ÆÄÀÏÀÌ ´õ ÀÌ»ó ÇÊ¿ä¾ø°Ô µÇ¸é µð½ºÅ©¿¡ ¾¸. (FILE_FLAG_DELETE_ON_CLOSE ¿Í ÇÔ²² ¾²¸é ÁÁÀ½)
+ ** ¿Ü ´Ù¼ö
+
+ * hfileTemplate ÀÎÀÚ - À̹̠¿­·Á Àִ ÆÄÀÏÀÇ ÇÚµéÀ» ¿©±â¿¡ Á¦°øÇϸé, ±× ÆÄÀÏÀÇ dwFlagsAndAttrs ¼Ó¼ºÀ» ºô·Á ¾¸.
+
+ * CreateFile ÀÌ ½ÇÆÐÇϸé '''INVALID_HANDLE_VALUE''' °¡ ¸®Åϵʠ(<font color=red>NULLÀÌ ¸®ÅϵǴ °ÍÀÌ ¾Æ´Ô¿¡ ÁÖÀÇ!!</font>)
+
+
+ === Working with File Devices ===
+
+ * À©µµ¿ìÁîÀÇ ÆÄÀÏ»çÀÌÁîÀÇ ÃÖ´ëÅ©±â´Â »ç½Ç 64-bit (16ExaByte) ÀÌ´Ù.
+
+ ==== Getting a File's Size ====
+ * BOOL GetFileSizeEx( HANDLE hfile, PLARGE_INTEGER pliFileSize )
+ * LARGE_INTEGER, ULARGE_INTEGER, LONGLONG, ULONGLONG
+ * DWORD GetCompressedFileSize( PCTSTR pszFileName, PDWORD pdwFileSizeHigh )
+
+ ==== Positioning a File Pointer ====
+ * ¾Ë¾ÆµÎ¸é ÁÁÀº APIµé: 
+ ** BOOL ReadFile( HANDLE hFile,  LPVOID lpBuffer, DWORD nNumberOfBytesToRead,  LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped );
+ ** BOOL DuplicateHandle( HANDLE hSourceProcessHandle,  HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lpTargetHandle,  DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions )
+ ** BOOL SetEndOfFile(  HANDLE hFile ) : ÆÄÀÏÀÇ Å©±â¸¦ °£´ÜÇÏ°Ô ´ÃÀ̰ųª ÁÙÀÏ ¼ö ÀÖ´Ù.
+
+ * BOOL '''SetFilePointerEx'''(  HANDLE hFile,  LARGE_INTEGER liDistanceToMove,  PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod ) : ÆÄÀÏ Æ÷ÀÎÅ͸¦ ¿òÁ÷ÀδÙ.
+
+ === Performing Synchronous Device I/O ===
+
+ <pre>
+ BOOL ReadFile(
+   HANDLE hFile,                // handle to file
+   LPVOID lpBuffer,             // data buffer
+   DWORD nNumberOfBytesToRead,  // number of bytes to read
+   LPDWORD lpNumberOfBytesRead, // number of bytes read
+   LPOVERLAPPED lpOverlapped    // overlapped buffer
+ );
+
+ BOOL WriteFile(
+   HANDLE hFile,                    // handle to file
+   LPCVOID lpBuffer,                // data buffer
+   DWORD nNumberOfBytesToWrite,     // number of bytes to write
+   LPDWORD lpNumberOfBytesWritten,  // number of bytes written
+   LPOVERLAPPED lpOverlapped        // overlapped buffer
+ );
+
+ BOOL FlushFileBuffers(
+   HANDLE hFile  // handle to file
+ );
+ </pre>
+
+ === Basics of Asynchronous Device I/O ===
+
+ * FILE_FLAG_OVERLAPPED ·Î »ý¼ºÇÑ hFile À» °¡Áö°í, ReadFile/WriteFileÀ» Çϸ頾î½ÌÅ©ÇÏ°Ô µ¿ÀÛÇÑ´Ù.
+ * ÀÌ °æ¿ì pdwNumBytes´Â Àǹ̾øÀ¸¹Ç·Î º¸Åë NULL À» ³Ö´Â´Ù.
+ * ¶ÇÇÑ OVERLAPPED ±¸Á¶Ã¼¸¦ ÃʱâÈ­ÇÏ¿© ÀÎÀڷΠÁ¦°øÇؾߠÇÑ´Ù.
+
+ ==== The OVERLAPPED Structure ====
+
+ <pre>
+ typedef struct _OVERLAPPED { 
+     ULONG_PTR  Internal;       // [out] Error code
+     ULONG_PTR  InternalHigh; // [out] Numver of bytes transferred
+     DWORD  Offset;               // [in] Low 32-bit file offset
+     DWORD  OffsetHigh;         // [in] High 32-bit file offset
+     HANDLE hEvent;              // [in] Event handle or data
+ } OVERLAPPED; 
+
+ #define HasOverlappedIoCompleted(pOverlapped) \
+     ((pOverlapped)->Internal != STATUS_PENDING)
+ </pre>
+
+ * '''Offset & OffsetHigh''' - 64ºñÆ® ÆÄÀÏ ¿É¼Â. ÆÄÀÏÀÌ ¾Æ´Ñ µð¹ÙÀ̽º¿¡ ´ëÇؼ­µµ Ã¼Å©µÇ¹Ç·Î ÀÌ °æ¿ì´Â 0 À¸·Î ¹Ýµå½Ã ÃʱâÈ­ ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é GetLastError()¿¡¼­ ERROR_INVALID_PARAMETER °¡ ¸®Åϵɠ°ÍÀÌ´Ù.
+ * '''hEvent''' - I/O completion notification À» ¹Þ±â À§ÇØ ¼¼ÆÃÇØ ÁØ´Ù.
+ * '''Internal''' - ¿¡·¯ÄÚµå È¤Àº I/O request Ã³¸® »óÅ°¡ ±â·ÏµÈ´Ù. ¾ÆÁ÷ Ã³¸®½ÃÀÛÇÏÁö ¾ÊÀº ÃʱⰪÀº STATUS_PENDING ÀÌ´Ù.
+ * '''InternalHigh''' - I/O request°¡ ¿Ï·áµÇ¸é Àü¼ÛµÈ ¹ÙÀÌÆ®°¡ ±â·ÏµÈ´Ù.
+
+ * I/O request°¡ ¿Ï·áµÇ¸é lpOverlapped ÀÇ Æ÷ÀÎÅ͸¦ Å뺸¹Þ°Ô µÈ´Ù.
+ * <font color=red>¸¸¾à ´õ ¸¹Àº context Á¤º¸ (¿¹¸¦ µé¾î hFile)¸¦ ÀÌ ±¸Á¶Ã¼¿¡ ³Ö°í ½Í´Ù¸é ¹æ¹ýÀÌ ÀÖ´Ù. OVERLAPPED¸¦ »ó¼ÓÇÑ ±¸Á¶Ã¼¸¦ Çϳª ¸¸µé¾î, lpOverlapped ¸¦ ¹Þ¾ÒÀ» ¶§ »õ ±¸Á¶Ã¼·Î casting Çϸ頵ȴÙ.</font> Áï, Àú Æ÷ÀÎÅʹ À¯ÁöµÈ´Ù.
+
+ ==== Asynchronous Device I/O Caveats ====
+ * Overlapped I/O ´Â FIFO ¹æ½ÄÀ¸·Î Ã³¸®µÇÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. Áï, ¸ÕÀú ¿äûÇÑ °ÍÀÌ ¸ÕÀú Ã³¸®µÈ´Ù°í º¸ÀåÇØ ÁÖÁö ¾Ê´Â´Ù.
+ * ¿¡·¯Ã³¸®¿¡ ÁÖÀÇÇÒ °Í:
+ ** async ·Î ¿äûÇصµ sync ·Î Ã³¸®µÉ ¼ö°¡ ÀÖ´Ù. (ij½¬¿¡ Àִ °æ¿ì µî) ÀÌ·± °æ¿ì¿¡´Â TRUE °¡ ¸®ÅϵǹǷΠµû·Î Ã³¸®ÇÒ °Í.
+ ** ¿¡·¯°¡ ³ª°Å³ª request °¡ queue ¿¡ µé¾î°¡¸é FALSE °¡ ¸®ÅϵȴÙ.
+ *** GetLastError()¸¦ ÇغÁ¾ß ÇÑ´Ù.
+ *** ERROR_IO_PENDING À̸頼º°øÀûÀ¸·Î Å¥À׵Ƞ°Í.
+ *** ´Ù¸¥ °ªÀ̸頿¡·¯ ¹ß»ý.
+ *** ERROR_INVALID_USER_BUFFER or ERROR_NOT_ENOUGH_MEMORY : device ÀÇ »ç¿ëÀÚ ¹öÆÛ°¡ ²Ë Âù °æ¿ì
+ *** ERROR_NOT_ENOUGH_QUOTA : device ¿¡ µû¶ó buffer (memory)¸¦ page lock ÇؾߠÇϴ °æ¿ì°¡ ÀÖ´Ù. ½Ì±Û ÇÁ·Î¼¼½º°¡ ÇÒ ¼ö Àִ page lockÀÇ »çÀÌÁî´Â ¹Ì¸® Á¤ÇØÁ® ÀÖÀ¸¹Ç·Î À̸¦ ³Ñ±â¸é page lock ¿¡ ½ÇÆÐÇÏ°Ô µÈ´Ù. À̶§ ¹ß»ýÇϴ ¿¡·¯. SetProcessWorkingSetSize() ·Î ÀÌ ¾çÀ» ´Ã¸± ¼ö ÀÖ´Ù.
+ ** <font color=red>¿¡·¯ ÇØ°á¹ý: ÀÌ ¿¡·¯µéÀº °á±¹ ³Ê¹« ¸¹Àº I/O request°¡ Ã³¸®µÇÁö ¸øÇѠä ³²¾Æ Àֱ⿡ »ý±â´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î Àá½Ã ¿äûÀ» º¸·ùÇß´Ù°¡ ´Ù½Ã ReadFileÀ̳ª WriteFileÀ» È£ÃâÇϸ頵ɠ°ÍÀÌ´Ù.</font>
+ * Data Buffer¿Í OVERLAPPED ±¸Á¶Ã¼ÀÇ ¸Þ¸ð¸®´Â I/O request°¡ ¿Ï·áµÉ ¶§±îÁö ÇØÁ¦µÇ°Å³ª À̵¿µÇ¾î¼­´Â ¾ÈµÈ´Ù!! ¹°·Ð °¢ I/O request¿¡ ´ëÇØ OVERLAPPED ±¸Á¶Ã¼´Â ¸ðµÎ ´Þ¶ó¾ß ÇÑ´Ù!!
+
+ ==== Cancelling Queued I/O Requests ====
+ * BOOL CancelIo( HANDLE hFile )
+ * handle À» ´ÝÀ¸¸é ¸ðµç Å¥À׵Ƞi/o´Â Ãë¼ÒµÈ´Ù.
+ * ½º·¹µå°¡ Á×À¸¸é ±× ½º·¹µå°¡ Å¥À×ÇÑ i/o´Â ÀÚµ¿À¸·Î Ãë¼ÒµÈ´Ù.
+ * Æ¯Á¤ i/o request Çϳª¸¸À» Ãë¼ÒÇϴ ¹æ¹ýÀº ¾ø´Ù.
+ * Ãë¼ÒµÈ I/O request´Â ERROR_OPERATION_ABORTED °ªÀ» °¡Áö°í complete Ã³¸®µÈ´Ù.
+
+
+ === Receiving Completed I/O Request Notifications ===
+ * I/O request°¡ ¿Ï·áµÇ¾úÀ» ¶§ notification À» ¹Þ´Â ¹æ¹ýÀº 4 °¡Áö°¡ ÀÖ´Ù.
+ || Signaling a device kernel object || ÇÑ device ¿¡ ´ëÇØ ¿©·¯ I/O request°¡ µ¿½Ã¿¡ ÁøÇàÁßÀ̶ó¸é ¾µ¸¸ÇÏÁö ¾ÊÀº ¹æ¹ýÀÌÁö¸¸, ÇÑ ¾²·¹µå°¡ I/O request¸¦ ¹ß»ý½ÃÅ°°í, ´Ù¸¥ ½º·¹µå°¡ ±×°ÍÀ» Ã³¸®Çϴ °ÍÀÌ °¡´ÉÇÏ´Ù. ||
+ || Signaling an event kernel object || ÇÑ device ¿¡ ´ëÇØ ¿©·¯ I/O request°¡ µ¿½Ã¿¡ ¹ß»ýÇصµ ±¦Âú´Ù. ÇÑ ¾²·¹µå°¡ I/O request¸¦ ¹ß»ý½ÃÅ°°í, ´Ù¸¥ ½º·¹µå°¡ ±×°ÍÀ» Ã³¸®Çϴ °ÍÀÌ °¡´ÉÇÏ´Ù. ||
+ || Using alertable I/O || ÇÑ device ¿¡ ´ëÇØ ¿©·¯ I/O request°¡ µ¿½Ã¿¡ ¹ß»ýÇصµ ±¦Âú´Ù. I/O request¸¦ ¹ß»ý½ÃŲ ½º·¹µå°¡ ¹Ýµå½Ã ±×°ÍÀ» Ã³¸®ÇؾߠÇÑ´Ù. ||
+ || Using <font color=red>I/O completion ports</font> || ÇÑ device ¿¡ ´ëÇØ  µ¿½Ã´Ù¹ß I/O request°¡ ¹ß»ýÇصµ ±¦Âú´Ù. ÇÑ ½º·¹µå°¡ I/O request¸¦ ¹ß»ý½ÃÅ°°í, ´Ù¸¥ ½º·¹µå°¡ ±×°ÍÀ» Ã³¸®Çϴ °ÍÀÌ °¡´ÉÇÏ´Ù. ¼º´É°ú À¯¿¬¼ºÀÌ °¡Àå ÁÁÀº ¹æ¹ý. ||
+
+ ==== Method 1. Signaling a Device Kernel Object ====
+
+ * thread syncronization : °á±¹ device ¿¡ÀÇ ¿äûÀ̠󸮵Ǿú´ÂÁö¸¦ ±â´Ù·Á¾ß ÇÑ´Ù.
+ * Ä¿³Î ¿ÀºêÁ§Æ®´Â signaled state³ª nonsignaled state ÁßÀÇ ÇÑ °ªÀ» °¡Áö°Ô µÈ´Ù.
+ * WaitForSingleObject() ³ª WaitForMultipleObjects() ¸¦ ½á¼­ request °¡ ¿Ï·áµÇ¾ú´ÂÁö ¾Ë ¼ö ÀÖ´Ù.
+
+ ==== Method 2. Signaling an Event kernel Object ====
+ * OVERLAPPED ±¸Á¶Ã¼ÀÇ hEvent ÆĶó¸ÞÅ͸¦ ÀÌ¿ëÇÑ´Ù.
+ * hEvent ÀÇ À̺¥Æ® ÇÚµéÀº CreateEvent()¸¦ ÀÌ¿ëÇؼ­ »ý¼º.
+ * multiple objectÀÇ ´ë±â´Â WaitForMultipleObjects()¸¦ ÀÌ¿ëÇؼ­ ÇÒ ¼ö ÀÖ´Ù.
+ * ¹°·Ð, WaitForSingleObject()·Î Çϳª¾¿ ±â´Ù·Áµµ µÈ´Ù.
+ * GetOverlappedResult()
+ <pre>
+ BOOL GetOverlappedResult(
+   HANDLE hFile,                       // handle to file, pipe, or device
+   LPOVERLAPPED lpOverlapped,          // overlapped structure
+   LPDWORD lpNumberOfBytesTransferred, // bytes transferred
+   BOOL bWait                          // wait option
+ );
+ </pre>
+
+ ==== Method 3. Alertable I/O ====
+ * ÀÌ ³ÑÀº ÁöÀúºÐ ÇϹǷΠ°¡´ÉÇϸé ÇÇÇؾߠÇÑ´Ù. ÇÏÁö¸¸ OS¿¡ Æ÷ÇԵȠ±× Áö¿øºÎºÐÀº ¾µ¹ýÇÑ °ÍÀÌ ÀÖ´Ù.
+ * APC Queue: an Asynchronous Procedure Call Queue - per threads.
+ * APC Queue¸¦ ÀÌ¿ëÇÏ·Á¸é ReadFileEx¿Í WriteFileEx¸¦ ½á¾ß ÇÑ´Ù.
+ <pre>
+ BOOL ReadFileEx(
+   HANDLE hFile,                                       // handle to file
+   LPVOID lpBuffer,                                    // data buffer
+   DWORD nNumberOfBytesToRead,                         // number of bytes to read
+   LPOVERLAPPED lpOverlapped,                          // offset
+   LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // completion routine
+ );
+
+ BOOL WriteFileEx(
+   HANDLE hFile,                                       // handle to output file
+   LPCVOID lpBuffer,                                   // data buffer
+   DWORD nNumberOfBytesToWrite,                        // number of bytes to write
+   LPOVERLAPPED lpOverlapped,                          // overlapped buffer
+   LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // completion routine
+ );
+
+ VOID CALLBACK FileIOCompletionRoutine(
+   DWORD dwErrorCode,                // completion code
+   DWORD dwNumberOfBytesTransfered,  // number of bytes transferred
+   LPOVERLAPPED lpOverlapped         // I/O information buffer
+ );
+ </pre>
+ * ReadFileEx/WriteFileEx¿¡ callback ÇÔ¼ö¸¦ ÁöÁ¤ÇÏ¿© È£ÃâÇÑ´Ù. (¹«Á¶°Ç async i/o request)
+ * tip: ÀÌ °æ¿ì OVERLAPPED::hEvent ´Â ÀüÇô »ç¿ëµÇÁö ¾ÊÀ¸¹Ç·Î, ¿øÇϴ ¿ëµµ·Î ½áµµ µÈ´Ù.
+ * i/o request°¡ Ã³¸®µÇ¸é device driver´Â ±× Á¤º¸¸¦ APC Queue¿¡ µî·ÏÇÑ´Ù. APC Queue¿¡´Â callback functionÀÇ Áּҿ͠󸮰á°ú¸¦ ÀúÀåÇÑ entry µéÀÌ Àִµ¥, ½ÇÁ¦·Î callback À̠ȣÃâµÇ´Â °ÍÀº ÀÌÈÄÀÇ ½ÃÁ¡ÀÌ´Ù. ±× ½ÃÁ¡À̶õ ¹Ù·Î thread°¡ alertable »óÅ°¡ µÇ´Â °ÍÀÌ´Ù.
+ * thread¸¦ altertable »óÅ·Π¸¸µå´Â ÇÔ¼ö´Â 5 °³°¡ ÀÖ´Ù.
+ ** DWORD SleepEx( DWORD dwTimeout, BOOL fAlertable )
+ ** DWORD WaitForSingleObjectEx( HANDLE hObject, DWORD dwTimeout, BOOL fAlertable )
+ ** DWODD WaitForMultipleObjectsEx( DWOD cObjects, PHANDLE phObjects, BOOL fWaitAll, DWORD dwTimeout, BOOL fAlertable )
+ ** BOOL SingleObjectAndWait( HANDLE hObjectToSignal, HANDLE hObjectToWaitOn, DWORD dwMilliseconds, BOOL fAlertable )
+ ** DWORD MsgWaitForMultipleObjectsEx( DWORD nCount, PHANDLE pHandles, DWORD dwMilliseconds, DWORD dwWakeMask, DWORD dwFlags )
+ * À§ÀÇ ÇÔ¼öµéÀº thread °¡ alertabe »óÅ°¡ µÇ¾î Çϳª¶óµµ i/o complete ¸¦ È®ÀÎÇÏ°í callback function À» È£ÃâÇßÀ¸¸é WAIT_IO_COMPLETION À» ¸®ÅÏ. ±×·¸Áö ¾ÊÀ¸¸é sleep Çß´Ù°¡ timeout µÇ¾î ÀϾ °ÍÀÓ.
+
+ * DWORD QueueUserAPC( PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData )
+ ** pfnAPC : VOID WINAPI APCFunc( ULONG_PTR dwParam )
+ ** hThread : ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ thread µµ °¡´É. ÀÌ °æ¿ì¿¡µµ pfnAPC´Â ÇØ´ç ½º·¹µåÀÇ ÁÖ¼Ò°ø°£À̾î¾ß ÇÔ.
+ ** dwData : ±×Àú callback ÇÔ¼ö¿¡ ³Ñ°ÜÁö´Â °ª. À̸¦ ÅëÇØ ´Ù¸¥ ÇÁ·Î¼¼½º/½º·¹µå¿Í °£´ÜÇÑ Åë½ÅÀ» ÇÒ ¼ö ÀÖ´Ù.
+ ** ÀÌ ÇÔ¼ö´Â wait state ÀÇ thread¸¦ °­Á¦·Î ±ú¾î³ª°Ô ÇÒ ¼ö ÀÖ´Ù. (Graceful Close: ±ú±ßÇÑ ¾²·¹µå Á×À̱⠱¸Çö µî¿¡ »ç¿ë°¡´É)
+
+ ==== Method 4. I/O Completion Ports ====
+ * Serial model: ping ¼­¹ö󷳠Ŭ¶óÀ̾ðÆ®ÀÇ ¿ä±¸¸¦ Âª°Ô Ã³¸®ÇÒ ¼ö Àִ ÀÏ.
+ * Concurrent model: listening thread¿Í working thread°¡ ºÐ¸®µÈ ¸ðµ¨. context switching ºñ¿ëÀÌ ³Ê¹« ¸¹ÀÌ µç´Ù.
+
+ ===== Creating an I/O Completion Port =====
+ * I/O completion port´Â thread pool ¸ðµ¨¿¡¼­ »ç¿ëµÇµµ·Ï ¸¸µé¾î Á³´Ù.
+ <pre>
+ HANDLE CreateIoCompletionPort (
+   HANDLE FileHandle,              // handle to file
+   HANDLE ExistingCompletionPort,  // handle to I/O completion port
+   ULONG_PTR CompletionKey,        // completion key
+   DWORD NumberOfConcurrentThreads // number of threads to execute concurrently
+ );
+ </pre>
+
+ * ÀÌ ÇÔ¼ö´Â ¸Å¿ì º¹ÀâÇÏ°í µÎ ºÎºÐÀ» Æ÷°ýÇÏ°í ÀÖÀ¸¹Ç·Î ´ÙÀ½ÀÇ µÎ °¡Áö ÀÛÀº ÇÔ¼ö·Î ºÐÇÒÇÒ °ÍÀ» Á¦¾ÈÇÑ´Ù.
+ * Ã¹¹ø° ºÎºÐ: i/o completion port »ý¼º.
+ <pre>
+ HANDLE CreatenewCompletionPort( DWORD dwNumberOfConcurrentThreads ) {
+   return (CreateIoCompletionPort( INVALID_HANDLE_VALUE, NULL, 0, dwNumberOfConcurrentThreads ));
+ </pre>
+
+ * i/o completion portÀÇ »ý¼ºÀº ´ÙÀ½ÀÇ 5 °¡Áö ±¸Á¶ÀÇ »ý¼ºÀ» ¾ß±âÇÑ´Ù.
+ ** Device List
+ ** I/O Completion Queue (FIFO)
+ ** Waiting Thread Queue (LIFO)
+ ** Released Thread List
+ ** Paused Thread List
+
+ ===== Associating a Device with an I/O Completion Port =====
+ * µÎ¹ø° ºÎºÐ: device¿Í completion port¸¦ ¿¬°á
+ <pre>
+ BOOL AssociateDeviceWithCompletionPort( HANDLE hCompPort, HANDLE hDevice, DWORD dwCompKey ) {
+   HANDLE h = CreateIoCompletionPort( hDevice, hCompPort, dwCompKey, 0 );
+   return ( h == hCompPort );
+ }
+ </pre>
+
+ ===== Archtecting Around an I/O Completion Port =====
+ * thread pool Àº kernel ¿¡ ÀÇÇØ °ü¸®µÇ´Â ¸ð¾ç(?)
+ * concurrent ÇÏ°Ô ½ÇÇàµÇ´Â ½º·¹µåÀÇ ¼ö´Â CPUÀÇ °³¼ö¿Í °°°Ô. ½ÇÁ¦·Î »ý¼ºÇϴ ½º·¹µåÀÇ °³¼ö´Â CPU °³¼ö x 2 °¡ ±ÇÀå»çÇ×.
+
+ * °¢ ½º·¹µå´Â ·çÇÁ¸¦ µ¹¸ç device I/O °¡ ³¡³ª±â¸¦ ±â´Ù¸®°ï ÇÒ °ÍÀÌ´Ù. (thread sleep!)
+ * ÀÌ ÀÛ¾÷À» Çϴ °ÍÀÌ GetQueuedCompletionStatus() ÇÔ¼ö.
+ <pre>
+ BOOL GetQueuedCompletionStatus(
+   HANDLE CompletionPort,       // handle to completion port
+   LPDWORD lpNumberOfBytes,     // bytes transferred
+   PULONG_PTR lpCompletionKey,  // file completion key
+   LPOVERLAPPED *lpOverlapped,  // buffer
+   DWORD dwMilliseconds         // optional timeout value
+ );
+ </pre>
+ * ÀÌ thread´Â Ä¿³Î ³»ºÎÀÇ waiting thread queue¿¡ µî·ÏµÊ.
+ * i/o completion ÀÌ ÀϾ¸é Ä¿³ÎÀÌ ÇØ´ç thread¸¦ ±ú¿ò.
+ * GetQueuedCompletionStatus()ÀÇ ¸®ÅÏ°ªÀ» °áÁ¤Çϴ °ÍÀº Á¶±Ý º¹ÀâÇÏ´Ù. (»ùÇÃÄڵ带 º¼°Í)
+ * Waiting Thread Queue°¡ LIFOÀΠ°ÍÀº ¼º´É Çâ»óÀ» À§ÇÑ °Í. i/o completionÀÇ ¼Óµµ°¡ ´À¸®´Ù¸é ÀûÀº ¼ö (ȤÀº 1°³)ÀÇ ½º·¹µå¸¸ ¾²ÀÏ °ÍÀÌ°í, ³ª¸ÓÁö´Â µð½ºÅ©¿¡ flush µÇ°Å³ª ÇÏ¿© ¸®¼Ò½º¸¦ °ÅÀÇ ¾²Áö ¾Ê°ÔµÈ´Ù.
+
+ ===== How the I/O Completion Port Manages the Thread Pool =====
+ # I/O completion À» ¸¸µé¸é¼­ concurrent threadÀÇ °³¼ö´Â CPUÀÇ °³¼ö·Î ¼¼ÆÃ.
+ # ½ÇÁ¦ ½º·¹µå´Â CPU°³¼öx2 °³¸¦ »ý¼º
+ # completed I/O°¡ Å¥¿¡ µé¾î¿À¸é completion port°¡ waiting thread¸¦ Çϳª ±ú¿ö¼­ released thread queue·Î ¿Å±è.
+ # ¸¸¾à running thread°¡ Sleep(), WaitForSingleObject()µîÀÇ sleepÀ» À¯µµÇϴ ÇÔ¼ö¸¦ callÇϸé, paused thread queue·Î ¿Å°Ü°¨. À̶§, released queueÀÇ ¼ö°¡ °¨¼ÒÇϹǷΠcompletion port°¡ waiting threadÀÇ ´Ù¸¥ ½º·¹µå¸¦ ±ú¿ö completed I/O¸¦ Ã³¸®Çϵµ·Ï ÇÔ. (ÃÖ´ë CPUÀÇ °³¼ö!)
+ # Áß°£¿¡ paused thread°¡ Æ¯Á¤ Á¶°ÇÀ» ¸¸Á·Çϸ鼭 ´Ù½Ã ±ú¾î³². completion port´Â À̸¦ °¨ÁöÇÏ°í ÀÌ ½º·¹µå¸¦ released thread queue·Î ¿Å±è. ÀÌ ¶§ ¼ø°£ÀûÀ¸·Î ÁöÁ¤Çß´ø concurrency threadÀÇ °³¼öº¸´Ù ¸¹Àº ½º·¹µå°¡ ½ÇÇàµÊ.
+ # º¸Åë ·çÇÁ¸¦ µ¹¸é¼­ ´Ù½Ã GetQueuedCompletionStatus()¸¦ È£ÃâÇÏ°Ô µÇ¹Ç·Î ÀÌ ½º·¹µå µéÀº waiting thread queue·Î µ¹¾Æ°¨.
+
+ * ÀÌ·± ½ÄÀ¸·Î released thread queue´Â Ç×»ó ÃÖ´ë °³¼ö·Î À¯ÁöµÇ¸ç, context switchingÀǠȸ¼ö°¡ ÃּҷΠÀ¯ÁöµÇ´Â °¡¿îµ¥, ÃÖ´ë È¿À²·Î µ¹¾Æ°¡°Ô µÊ.
+
+ ===== How Many Threads in the Pool? =====
+ * heuristic algorithms (°¡À̵å¶óÀΠ»ùÇàÄÚµå ÂüÁ¶)
+
+ ===== Simulating Completed I/O Requests =====
+ * PostQueuedCompletionStatus ¸¦ ÀÌ¿ëÇؼ­ °¡Â¥ i/o completion entry¸¦ ¿Ã¸± ¼ö ÀÖ´Ù.
+ * À̸¦ ÀÌ¿ëÇؼ­ thread °£ÀÇ Åë½ÅÀ» ÇÒ ¼ö ÀÖ´Ù!
+ * threadÀÇ graceful close ¸¦ ÇÒ ¼ö ÀÖÀ¸³ª, ÀÌ °æ¿ì wait thread queue°¡ LIFO ¶ó´Â °ÍÀ» ÁÖÀÇÇؾߠÇÑ´Ù. (Ã¥ÀáÁ¶)
+ <pre>
+ BOOL PostQueuedCompletionStatus(
+   HANDLE CompletionPort,            // handle to an I/O completion port
+   DWORD dwNumberOfBytesTransferred, // bytes transferred
+   ULONG_PTR dwCompletionKey,        // completion key 
+   LPOVERLAPPED lpOverlapped         // overlapped buffer
+ );
+ </pre>
+
+ == Tips From This Book ==
+ ----
+ [[ºÐ·ù°³¹ß]]