Java NIOÀà¿âSelector»úÖÆ½âÎö£¨Ï£©
Java NIOÀà¿âSelector»úÖÆ½âÎö£¨Ï£©
ÕÔï¿¡¡¡¡ ³Âð©
http://blog.csdn.net/haoel
<<<<µã´Ë²é¿´±¾ÎÄÉÏÆª
Îå¡¢ ÃÔ»ó²»½â : ΪʲôҪ×Ô¼ºÏûºÄ×ÊÔ´£¿
ÁîÈ˲»½âµÄÊÇΪʲôÎÒÃǵÄJavaµÄNew I/OÒªÉè¼Æ³ÉÕâ¸öÑù×Ó£¿Èç¹û˵ÀϵÄI/O²»Äܶà·¸´Óã¬ÈçÏÂͼËùʾ£¬Òª¿ªN¶àµÄÏß³ÌÈ¥°¤¸öÕìÌýÿһ¸öChannel (ÎļþÃèÊö·û) £¬Èç¹ûÕâÑù×öºÜ·Ñ×ÊÔ´£¬ÇÒЧÂʲ»¸ßµÄ»°¡£ÄÇΪʲôÔÚеÄI/O»úÖÆÒÀÈ»ÐèÒª×Ô¼ºÁ¬½Ó×Ô¼º£¬¶øÇÒ£¬»¹ÊÇÖØ¸´Á¬½Ó£¬ÏûºÄË«±¶µÄ×ÊÔ´£¿
ͨ¹ýWEBËÑË÷ÒýÇæÃ»ÓÐÕÒµ½ÎªÊ²Ã´¡£Ö»¿´µ½N¶àµÄÈËÔÚ±¨BUG£¬µ«SUNȴûÓÐÈκνâÊÍ¡£
ÏÂÃæÒ»¸öͼչʾÁË£¬ÀϵÄIOºÍÐÂIOµÄÔÚÍøÂç±à³Ì·½ÃæµÄ²î±ð¡£¿´ÆðÀ´NIOµÄÈ·ºÜºÃºÜÇ¿´ó¡£µ«Ëƺõ±ÈÆðC/C++À´Ëµ£¬JavaµÄÕâÖÖʵÏÖ»áÓÐһЩ²»±ØÒªµÄ¿ªÏú¡£
Áù¡¢ Ëüɽ֮ʯ : ´ÓApacheµÄMina¿ò¼ÜÁ˽âSelector
ÉÏÃæµÄµ÷²éû¹ý¶à³¤Ê±¼ä£¬ÕýºÃͬѧÕÔ￵ÄÒ»¸öͬÊÂÒ²ÔÚ¿ª·¢ÍøÂç³ÌÐò£¬ÕâλÈÊÐÖʹÓÃÁËApacheµÄMina¿ò¼Ü¡£µ±ÎÒÃǰÑMina¿ò¼ÜµÄÔ´ÂëÑжÁÁËһϺ󡣷¢ÏÖÔÚMinaÖÐÓÐÕâôһ¸ö»úÖÆ£º
1£©Mina¿ò¼Ü»á´´½¨Ò»¸öWork¶ÔÏóµÄÏ̡߳£
2£©Work¶ÔÏóµÄÏ̵߳Ärun()·½·¨»á´ÓÒ»¸ö¶ÓÁÐÖÐÄóöÒ»¶ÑChannel£¬È»ºóʹÓÃSelector.select()·½·¨À´ÕìÌýÊÇ·ñÓÐÊý¾Ý¿ÉÒÔ¶Á/д¡£
3£©×î¹Ø¼üµÄÊÇ£¬ÔÚselectµÄʱºò£¬Èç¹û¶ÓÁÐÓÐеÄChannel¼ÓÈ룬ÄÇô£¬Selector.select()»á±»»½ÐÑ£¬È»ºóÖØÐÂselect×îеÄChannel¼¯ºÏ¡£
4£©Òª»½ÐÑselect·½·¨£¬Ö»ÐèÒªµ÷ÓÃSelectorµÄwakeup()·½·¨¡£
¶ÔÓÚÊìϤÓÚϵͳµ÷ÓõÄC/C++³ÌÐòÔ±À´Ëµ£¬Ò»¸ö×èÈûÔÚselectÉϵÄÏß³ÌÓÐÒÔÏÂÈýÖÖ·½Ê½¿ÉÒÔ±»»½ÐÑ£º
1£© ÓÐÊý¾Ý¿É¶Á/д£¬»ò³öÏÖÒì³£¡£
2£© ×èÈûʱ¼äµ½£¬¼´time out¡£
3£© ÊÕµ½Ò»¸önon-blockµÄÐźš£¿ÉÓÉkill»òpthread_kill·¢³ö¡£
ËùÒÔ£¬Selector.wakeup()Òª»½ÐÑ×èÈûµÄselect£¬ÄÇôҲֻÄÜͨ¹ýÕâÈýÖÖ·½·¨£¬ÆäÖУº
1£©µÚ¶þÖÖ·½·¨¿ÉÒÔÅųý£¬ÒòΪselectÒ»µ©×èÈû£¬Ó¦ÎÞ·¨ÐÞ¸ÄÆätime outʱ¼ä¡£
2£©¶øµÚÈýÖÖ¿´À´Ö»ÄÜÔÚLinuxÉÏʵÏÖ£¬WindowsÉÏûÓÐÕâÖÖÐźÅ֪ͨµÄ»úÖÆ¡£
ËùÒÔ£¬¿´À´Ö»ÓеÚÒ»ÖÖ·½·¨ÁË¡£ÔÙ»ØÏ뵽Ϊʲôÿ¸öSelector.open()£¬ÔÚWindows»á½¨Á¢Ò»¶Ô×Ô¼ººÍ×Ô¼ºµÄloopbackµÄTCPÁ¬½Ó£»ÔÚLinuxÉϻῪһ¶Ôpipe£¨pipeÔÚLinuxÏÂÒ»°ã¶¼ÊdzɶԴò¿ª£©£¬¹À¼ÆÎÒÃÇÄܹ»²ÂµÃ³öÀ´——ÄǾÍÊÇÈç¹ûÏëÒª»½ÐÑselect£¬Ö»ÐèÒª³¯×Å×Ô¼ºµÄÕâ¸ölo
Ïà¹ØÎĵµ£º
³ÌÐòÖеıàÂë·ç¸ñÈÃÎÒÃǵıà³Ì¹¤×÷±äµÃÇáËÉ£¬ÌرðÊdzÌÐòά»¤Ô±£¬ËûÃÇÒª¾³£ÔĶÁÆäËûÈ˱àдµÄ³ÌÐò±àÂ룬ÕâÒ»µãÓÈÆäÍ»³ö¡£±àÂë¹æ·¶´Ó¸ù±¾ÉϽâ¾öÁ˳ÌÐòά»¤Ô±µÄÄÑÌ⣻¹æ·¶µÄ±àÂëÔĶÁºÍÀí½âÆðÀ´¸üÈÝÒ×£¬Ò²¿ÉÒÔ¿ìËٵIJ»·ÑÁ¦ÆøµÄ½è¼ø±ðÈ˵ıàÂë¡£¶Ô½«À´Î¬»¤Äã±àÂëµÄÈËÀ´Ëµ£¬ÄãµÄ±àÂëÔ½ÓÅ»¯£¬ËûÃǾÍԽϲ»¶ÄãµÄ±àÂ룬Àí½âÆðÀ´Ò²¾ÍÔ½ ......
ÓÉÓÚͬһ½ø³ÌµÄ¶à¸öÏ̹߳²ÏíͬһƬ´æ´¢¿Õ¼ä£¬ÔÚ´øÀ´·½±ãµÄͬʱ£¬Ò²´øÀ´ÁË·ÃÎʳåÍ»Õâ¸öÑÏÖØµÄÎÊÌâ¡£JavaÓïÑÔÌṩÁËרÃÅ»úÖÆÒÔ½â¾öÕâÖÖ³åÍ»£¬ÓÐЧ±ÜÃâÁËͬһ¸öÊý¾Ý¶ÔÏó±»¶à¸öÏß³Ìͬʱ·ÃÎÊ¡£
ÐèÒªÃ÷È·µÄ¼¸¸öÎÊÌ⣺
1)synchronized¹Ø¼ü×Ö¿ÉÒÔ×÷Ϊº¯ÊýµÄÐÞÊηû£¬Ò²¿É×÷Ϊº¯ÊýÄÚµÄÓï¾ä£ ......
Ê×ÏÈ¿´Çå³þ¼¸ÖÖ³£ÓõÄ×Ö·û¼¯±àÂë(javaÓïÑÔÊDzÉÓÃunicode×Ö·û¼¯±àÂëÀ´±íʾ×Ö·ûÓë×Ö·û´®µÄ)£º
¡¡¡¡ASCII(American Standard Code for Information Interchange£¬ÃÀ¹úÐÅÏ¢»¥»»±ê×¼´úÂë)£¬ÊÇ»ùÓÚ³£ÓõÄÓ¢ÎÄ×Ö·ûµÄÒ»Ì×µçÄÔ±àÂëϵͳ¡£ÎÒÃÇÖªµÀÓ¢ÎÄÖо³£Ê¹ÓõÄ×Ö·û¡¢Êý×Ö·ûºÅ±»¼ÆËã»ú´¦Àíʱ¶¼ÊÇÒÔ¶þ½øÖÆÂëµÄÐÎʽ³öÏֵġ£ÕâÖÖ¶þ½ø ......
ʲôÊÇ·´Éä
java³ÌÐò¿ÉÒÔÔÚÔËÐÐÆÚ¼ä¶¯Ì¬µÄ¼ÓÔØ¡¢½âÎöºÍʹÓÃһЩÔÚ±àÒë½×¶Î²¢²»È·¶¨µÄÀàÐÍ£¬ÕâÒ»»úÖÆ±»³ÆÎª“·´É䣨reflection£©”»òÕß“ÄÚÊ¡£¨introspection£©”.
·´Éä»úÖÆÌṩµÄ¹¦ÄÜ
1£¬¼ÓÔØÔËÐÐʱ²ÅÄÜÈ·¶¨µÄÀàÐÍ
  ......