## Java IO * [1.Java 䏿å ç§ç±»åçæµï¼](#1java-䏿å ç§ç±»åçæµ) * [2.ä»ä¹æ¯ javaåºååï¼](#2ä»ä¹æ¯-javaåºåå) * [3.å¦ä½å®ç° java åºååï¼](#3å¦ä½å®ç°-java-åºåå) * [4.åèæµåå符æµçåºå«ï¼](#4åèæµåå符æµçåºå«) * [5.PrintStreamãBufferedWriterãPrintWriterçæ¯è¾?](#5printstreambufferedwriterprintwriterçæ¯è¾) * [6.ä»ä¹æ¯èç¹æµ,ä»ä¹æ¯å¤çæµ,å®ä»¬åæä»ä¹ç¨å¤,å¤çæµçå建æä»ä¹ç¹å¾ï¼](#6ä»ä¹æ¯èç¹æµä»ä¹æ¯å¤çæµå®ä»¬åæä»ä¹ç¨å¤å¤çæµçå建æä»ä¹ç¹å¾) * [7.æµä¸è¬éè¦ä¸éè¦å ³é,å¦æå ³éçè¯å¨ç¨ä»ä¹æ¹æ³,ä¸è¬è¦å¨é£ä¸ªä»£ç åéé¢å ³éæ¯è¾å¥½ï¼å¤çæµæ¯æä¹å ³éçï¼å¦ææå¤ä¸ªæµäºç¸è°ç¨ä¼ å ¥æ¯æä¹å ³éçï¼](#7æµä¸è¬éè¦ä¸éè¦å ³éå¦æå ³éçè¯å¨ç¨ä»ä¹æ¹æ³ä¸è¬è¦å¨é£ä¸ªä»£ç åéé¢å ³éæ¯è¾å¥½å¤çæµæ¯æä¹å ³éç妿æå¤ä¸ªæµäºç¸è°ç¨ä¼ å ¥æ¯æä¹å ³éç) * [8.ä»ä¹æ¯BIO](#8ä»ä¹æ¯bio) * [9.ä»ä¹æ¯NIO](#9ä»ä¹æ¯nio) * [10.ä»ä¹æ¯AIO](#10ä»ä¹æ¯aio) * [11.忥ä¸å¼æ¥](#11忥ä¸å¼æ¥) * [12.é»å¡ä¸éé»å¡](#12é»å¡ä¸éé»å¡) * [13.忥ã弿¥ãé»å¡ãéå µå¡](#13忥弿¥é»å¡éå µå¡) * [14.ééæ¯ä¸ªä»ä¹ææï¼](#14ééæ¯ä¸ªä»ä¹ææ) * [15.ç¼å²åºæ¯ä»ä¹ææï¼](#15ç¼å²åºæ¯ä»ä¹ææ) * [16.IOå¤è·¯å¤ç¨çåºå±åç](#16ioå¤è·¯å¤ç¨çåºå±åç) * [åè龿¥](#åè龿¥) #### 1.Java 䏿å ç§ç±»åçæµï¼ ï¼1ï¼æç §æµçæ¹åï¼è¾å ¥æµï¼inputStreamï¼åè¾åºæµï¼outputStreamï¼ï¼ï¼2ï¼æç §å®ç°åè½åï¼èç¹æµï¼å¯ä»¥ä»æåä¸ä¸ªç¹å®çå°æ¹ï¼èç¹ï¼è¯»åæ°æ®ãå¦ FileReaderï¼åå¤çæµï¼æ¯å¯¹ä¸ä¸ªå·²åå¨çæµçè¿æ¥åå°è£ ï¼éè¿æå°è£ çæµçåè½è°ç¨å®ç°æ°æ®è¯»åãå¦ BufferedReaderãå¤çæµçæé æ¹æ³æ»æ¯è¦å¸¦ä¸ä¸ªå ¶ä»çæµå¯¹è±¡ååæ°ãä¸ä¸ªæµå¯¹è±¡ç»è¿å ¶ä»æµç夿¬¡å è£ ï¼ç§°ä¸ºæµç龿¥ï¼ï¼ï¼3ï¼æç §å¤çæ°æ®çåä½ï¼ åèæµåå符æµãåèæµç»§æ¿äº InputStream å OutputStreaï¼å符æµç»§æ¿äºInputStreamReader å OutputStreamWriter ã #### 2.ä»ä¹æ¯ javaåºååï¼ åºååå°±æ¯ä¸ç§ç¨æ¥å¤ç对象æµçæºå¶ï¼æè°å¯¹è±¡æµä¹å°±æ¯å°å¯¹è±¡çå 容è¿è¡æµåãå¯ä»¥å¯¹æµååç对象è¿è¡è¯»åæä½ï¼ä¹å¯å°æµååçå¯¹è±¡ä¼ è¾äºç½ç»ä¹é´ãåºååæ¯ä¸ºäºè§£å³å¨å¯¹å¯¹è±¡æµè¿è¡è¯»åæä½æ¶æå¼åçé®é¢ #### 3.å¦ä½å®ç° java åºååï¼ åºååçå®ç°ï¼å°éè¦è¢«åºååçç±»å®ç°Serializable æ¥å£ï¼è¯¥æ¥å£æ²¡æéè¦å®ç°çæ¹æ³ï¼implements Serializable åªæ¯ä¸ºäºæ 注该对象æ¯å¯è¢«åºååçï¼ç¶å使ç¨ä¸ä¸ªè¾åºæµ(å¦ï¼File Output Stream)æ¥æé ä¸ä¸ª Object Output Stream(对象æµ)å¯¹è±¡ï¼æ¥çï¼ä½¿ç¨ Object Output Stream 对象ç write Object(Object obj)æ¹æ³å°±å¯ä»¥å°åæ°ä¸º obj ç对象ååº(å³ä¿åå ¶ç¶æ)ï¼è¦æ¢å¤çè¯åç¨è¾å ¥æµã #### 4.åèæµåå符æµçåºå«ï¼ åèæµè¯»åçæ¶åï¼è¯»å°ä¸ä¸ªåèå°±è¿åä¸ä¸ªåèï¼å符æµä½¿ç¨äºåèæµè¯»å°ä¸ä¸ªæå¤ä¸ªåèï¼ä¸æå¯¹åºçåèæ°æ¯ä¸¤ä¸ªï¼å¨ UTF-8 ç è¡¨ä¸æ¯ 3 个åèï¼æ¶ãå 廿¥æå®çç¼ç 表ï¼å°æ¥å°çå符è¿åãåèæµå¯ä»¥å¤çææç±»åæ°æ®ï¼å¦ï¼å¾çï¼MP3ï¼AVIè§é¢æä»¶ï¼èå符æµåªè½å¤çåç¬¦æ°æ®ãåªè¦æ¯å¤ççº¯ææ¬æ°æ®ï¼å°±è¦ä¼å èè使ç¨å符æµï¼é¤æ¤ä¹å¤é½ç¨åèæµãåèæµä¸»è¦æ¯æä½ byte ç±»åæ°æ®ï¼ä»¥ byte æ°ç»ä¸ºåï¼ä¸»è¦æä½ç±»å°±æ¯ OutputStreamãInputStreamå符æµå¤ççåå 为 2 个åèç Unicode å符ï¼å嫿ä½å符ãå符æ°ç»æå符串ï¼èåèæµå¤çåå 为 1 个åèï¼æä½åèååèæ°ç»ãæä»¥åç¬¦æµæ¯ç± Java èææºå°åè转å为 2 个åèç Unicode å符为åä½çå符èæçï¼æä»¥å®å¯¹å¤å½è¯è¨æ¯ææ§æ¯è¾å¥½ï¼å¦ææ¯é³é¢æä»¶ãå¾çãææ²ï¼å°±ç¨åèæµå¥½ç¹ï¼å¦ææ¯å ³ç³»å°ä¸æï¼ææ¬ï¼çï¼ç¨å符æµå¥½ç¹ãå¨ç¨åºä¸ä¸ä¸ªå符çäºä¸¤ä¸ªåèï¼java æä¾äº ReaderãWriter 两个ä¸é¨æä½å符æµçç±»ã #### 5.PrintStreamãBufferedWriterãPrintWriterçæ¯è¾? 1. PrintStreamç±»çè¾åºåè½é常强大ï¼é叏妿éè¦è¾åºææ¬å 容ï¼é½åºè¯¥å°è¾åºæµå è£ æPrintStreamåè¿è¡è¾åºãå®è¿æä¾å ¶ä»ä¸¤é¡¹åè½ãä¸å ¶ä»è¾åºæµä¸åï¼PrintStream æ°¸è¿ä¸ä¼æåº IOExceptionï¼èæ¯ï¼å¼å¸¸æ åµä» 设置å¯éè¿ checkError æ¹æ³æµè¯çå 鍿 å¿ãå¦å¤ï¼ä¸ºäºèªå¨å·æ°ï¼å¯ä»¥å建ä¸ä¸ª PrintStream 2. BufferedWriter:å°ææ¬åå ¥å符è¾åºæµï¼ç¼å²å个å符ä»èæä¾å个åç¬¦ï¼æ°ç»åå符串ç髿åå ¥ãéè¿write()æ¹æ³å¯ä»¥å°è·åå°çå符è¾åºï¼ç¶åéè¿newLine()è¿è¡æ¢è¡æä½ãBufferedWriterä¸çå符æµå¿ é¡»éè¿è°ç¨flushæ¹æ³æè½å°å ¶å·åºå»ãå¹¶ä¸BufferedWriteråªè½å¯¹å符æµè¿è¡æä½ã妿è¦å¯¹åèæµæä½ï¼å使ç¨BufferedInputStream 3. PrintWriterçprintlnæ¹æ³èªå¨æ·»å æ¢è¡ï¼ä¸ä¼æå¼å¸¸ï¼è¥å ³å¿å¼å¸¸ï¼éè¦è°ç¨checkErroræ¹æ³çæ¯å¦æå¼å¸¸åçï¼PrintWriteræé æ¹æ³å¯æå®åæ°ï¼å®ç°èªå¨å·æ°ç¼åï¼autoflushï¼ #### 6.ä»ä¹æ¯èç¹æµ,ä»ä¹æ¯å¤çæµ,å®ä»¬åæä»ä¹ç¨å¤,å¤çæµçå建æä»ä¹ç¹å¾ï¼ 1. èç¹æµ ç´æ¥ä¸æ°æ®æºç¸è¿ï¼ç¨äºè¾å ¥æè è¾åº 2. å¤çæµï¼å¨èç¹æµçåºç¡ä¸å¯¹ä¹è¿è¡å å·¥ï¼è¿è¡ä¸äºåè½çæ©å± 3. å¤çæµçæé å¨å¿ é¡»è¦ ä¼ å ¥èç¹æµçåç±» #### 7.æµä¸è¬éè¦ä¸éè¦å ³é,å¦æå ³éçè¯å¨ç¨ä»ä¹æ¹æ³,ä¸è¬è¦å¨é£ä¸ªä»£ç åéé¢å ³éæ¯è¾å¥½ï¼å¤çæµæ¯æä¹å ³éçï¼å¦ææå¤ä¸ªæµäºç¸è°ç¨ä¼ å ¥æ¯æä¹å ³éçï¼ 1. æµä¸æ¦æå¼å°±å¿ é¡»å ³éï¼ä½¿ç¨closeæ¹æ³ 2. æ¾å ¥finallyè¯å¥åä¸ï¼finally è¯å¥ä¸å®ä¼æ§è¡ï¼ 3. è°ç¨çå¤çæµå°±å ³éå¤çæµ 4. å¤ä¸ªæµäºç¸è°ç¨åªå ³éæå¤å±çæµ #### 8.ä»ä¹æ¯BIO BIO å°±æ¯ä¼ ç»ç [java.io](http://java.io/) å ï¼å®æ¯åºäºæµæ¨¡åå®ç°çï¼äº¤äºçæ¹å¼æ¯åæ¥ãé»å¡æ¹å¼ï¼ä¹å°±æ¯è¯´å¨è¯»å ¥è¾å ¥æµæè è¾åºæµæ¶ï¼å¨è¯»åå¨ä½å®æä¹åï¼çº¿ç¨ä¼ä¸ç´é»å¡å¨é£éï¼å®ä»¬ä¹é´çè°ç¨æ¶å¯é ç线æ§é¡ºåºãå®çæç¹å°±æ¯ä»£ç æ¯è¾ç®åãç´è§ï¼ç¼ºç¹å°±æ¯ IO çæç忩屿§å¾ä½ï¼å®¹ææä¸ºåºç¨æ§è½ç¶é¢ã #### 9.ä»ä¹æ¯NIO æ¯ Java 1.4 å¼å ¥ç java.nio å ï¼æä¾äº ChannelãSelectorãBuffer çæ°çæ½è±¡ï¼å¯ä»¥æå»ºå¤è·¯å¤ç¨çã忥éé»å¡ IO ç¨åºï¼åæ¶æä¾äºæ´æ¥è¿æä½ç³»ç»åºå±é«æ§è½çæ°æ®æä½æ¹å¼ã #### 10.ä»ä¹æ¯AIO AIO æ¯ Java 1.7 ä¹åå¼å ¥çå ï¼æ¯ NIO çåçº§çæ¬ï¼æä¾äºå¼æ¥éå µå¡ç IO æä½æ¹å¼ï¼æä»¥äººä»¬å«å® AIOï¼Asynchronous IOï¼ï¼å¼æ¥ IO æ¯åºäºäºä»¶ååè°æºå¶å®ç°çï¼ä¹å°±æ¯åºç¨æä½ä¹åä¼ç´æ¥è¿åï¼ä¸ä¼å µå¡å¨é£éï¼å½åå°å¤çå®æï¼æä½ç³»ç»ä¼éç¥ç¸åºç线ç¨è¿è¡åç»çæä½ #### 11.忥ä¸å¼æ¥ 忥就æ¯ä¸ä¸ªä»»å¡ç宿éè¦ä¾èµå¦å¤ä¸ä¸ªä»»å¡æ¶ï¼åªæçå¾ è¢«ä¾èµçä»»å¡å®æåï¼ä¾èµç任塿è½ç®å®æï¼è¿æ¯ä¸ç§å¯é çä»»å¡åºåãè¦ä¹æå齿åï¼å¤±è´¥é½å¤±è´¥ï¼ä¸¤ä¸ªä»»å¡çç¶æå¯ä»¥ä¿æä¸è´ãè弿¥æ¯ä¸éè¦çå¾ è¢«ä¾èµçä»»å¡å®æï¼åªæ¯éç¥è¢«ä¾èµçä»»å¡è¦å®æä»ä¹å·¥ä½ï¼ä¾èµçä»»å¡ä¹ç«å³æ§è¡ï¼åªè¦èªå·±å®æäºæ´ä¸ªä»»å¡å°±ç®å®æäºãè³äºè¢«ä¾èµçä»»å¡æç»æ¯å¦çæ£å®æï¼ä¾èµå®ç任塿 æ³ç¡®å®ï¼æä»¥å®æ¯ä¸å¯é çä»»å¡åºåãæä»¬å¯ä»¥ç¨æçµè¯ååçä¿¡æ¥å¾å¥½çæ¯å»åæ¥ä¸å¼æ¥æä½ã #### 12.é»å¡ä¸éé»å¡ é»å¡ä¸éé»å¡ä¸»è¦æ¯ä» CPU çæ¶è䏿¥è¯´çï¼é»å¡å°±æ¯ CPU å䏿¥çå¾ ä¸ä¸ªæ ¢çæä½å®æ CPU ææ¥çå®æå ¶å®çäºãéé»å¡å°±æ¯å¨è¿ä¸ªæ ¢çæä½å¨æ§è¡æ¶ CPU å»å¹²å ¶å®å«çäºï¼çè¿ä¸ªæ ¢çæä½å®ææ¶ï¼CPU 忥ç宿åç»çæä½ãè½ç¶è¡¨é¢ä¸çéé»å¡çæ¹å¼å¯ä»¥ææ¾çæé« CPU çå©ç¨çï¼ä½æ¯ä¹å¸¦äºå¦å¤ä¸ç§åæå°±æ¯ç³»ç»ç线ç¨åæ¢å¢å ãå¢å ç CPU ä½¿ç¨æ¶é´è½ä¸è½è¡¥å¿ç³»ç»çåæ¢ææ¬éè¦å¥½å¥½è¯ä¼°ã #### 13.忥ã弿¥ãé»å¡ãéå µå¡ å/å¼ãé»/éå µå¡çç»åï¼æåç§ç±»åï¼å¦ä¸è¡¨ï¼ | ç»åæ¹å¼ | æ§è½åæ | | ---------- | ------------------------------------------------------------ | | 忥é»å¡ | æå¸¸ç¨çä¸ç§ç¨æ³ï¼ä½¿ç¨ä¹æ¯æç®åçï¼ä½æ¯ I/O æ§è½ä¸è¬å¾å·®ï¼CPU 大é¨åå¨ç©ºé²ç¶æã | | 忥éé»å¡ | æå I/O æ§è½çå¸¸ç¨ææ®µï¼å°±æ¯å° I/O çé»å¡æ¹æéé»å¡æ¹å¼ï¼å°¤å ¶å¨ç½ç» I/O æ¯é¿è¿æ¥ï¼åæ¶ä¼ è¾æ°æ®ä¹ä¸æ¯å¾å¤çæ åµä¸ï¼æåæ§è½é常ææã è¿ç§æ¹å¼éå¸¸è½æå I/O æ§è½ï¼ä½æ¯ä¼å¢å CPU æ¶èï¼è¦èèå¢å ç I/O æ§è½è½ä¸è½è¡¥å¿ CPU çæ¶èï¼ä¹å°±æ¯ç³»ç»çç¶é¢æ¯å¨ I/O è¿æ¯å¨ CPU ä¸ã | | 弿¥é»å¡ | è¿ç§æ¹å¼å¨åå¸å¼æ°æ®åºä¸ç»å¸¸ç¨å°ï¼ä¾å¦å¨ç½ä¸ä¸ªåå¸å¼æ°æ®åºä¸å䏿¡è®°å½ï¼é叏伿ä¸ä»½æ¯åæ¥é»å¡çè®°å½ï¼èè¿æä¸¤è³ä¸ä»½æ¯å¤ä»½è®°å½ä¼åå°å ¶å®æºå¨ä¸ï¼è¿äºå¤ä»½è®°å½é叏齿¯éç¨å¼æ¥é»å¡çæ¹å¼å I/Oã弿¥é»å¡å¯¹ç½ç» I/O è½å¤æåæçï¼å°¤å ¶åä¸é¢è¿ç§åæ¶åå¤ä»½ç¸åæ°æ®çæ åµã | | 弿¥éé»å¡ | è¿ç§ç»åæ¹å¼ç¨èµ·æ¥æ¯è¾å¤æï¼åªæå¨ä¸äºé叏夿çåå¸å¼æ åµä¸ä½¿ç¨ï¼åé群ä¹é´çæ¶æ¯åæ¥æºå¶ä¸è¬ç¨è¿ç§ I/O ç»åæ¹å¼ãå¦ Cassandra ç Gossip éä¿¡æºå¶å°±æ¯éç¨å¼æ¥éé»å¡çæ¹å¼ãå®éååæ¶è¦ä¼ å¤ä»½ç¸åçæ°æ®å°é群ä¸ä¸åçæºå¨ï¼åæ¶æ°æ®çä¼ è¾éè½ç¶ä¸å¤§ï¼ä½æ¯å´é常é¢ç¹ãè¿ç§ç½ç» I/O ç¨è¿ä¸ªæ¹å¼æ§è½è½è¾¾å°æé«ã | #### 14.ééæ¯ä¸ªä»ä¹ææï¼ - é鿝坹å I/O å ä¸çæµç模æãå°ä»»ä½ç®çå°(ææ¥èªä»»ä½å°æ¹)çæææ°æ®é½å¿ é¡»éè¿ä¸ä¸ª Channel 对象ï¼ééï¼ãä¸ä¸ª Buffer å®è´¨ä¸æ¯ä¸ä¸ªå®¹å¨å¯¹è±¡ãåéç»ä¸ä¸ªééçææå¯¹è±¡é½å¿ é¡»é¦å æ¾å°ç¼å²åºä¸ï¼åæ ·å°ï¼ä»ééä¸è¯»åç任使°æ®é½è¦è¯»å°ç¼å²åºä¸ãChannelæ¯ä¸ä¸ªå¯¹è±¡ï¼å¯ä»¥éè¿å®è¯»åååå ¥æ°æ®ãæ¿ NIO ä¸åæ¥ç I/O å个æ¯è¾ï¼éé就忝æµã - æ£å¦å颿å°çï¼æææ°æ®é½éè¿ Buffer 对象æ¥å¤çãæ¨æ°¸è¿ä¸ä¼å°åèç´æ¥åå ¥ééä¸ï¼ç¸åï¼æ¨æ¯å°æ°æ®åå ¥å å«ä¸ä¸ªæè å¤ä¸ªåèçç¼å²åºãåæ ·ï¼æ¨ä¸ä¼ç´æ¥ä»ééä¸è¯»ååèï¼èæ¯å°æ°æ®ä»ééè¯»å ¥ç¼å²åºï¼åä»ç¼å²åºè·åè¿ä¸ªåèã #### 15.ç¼å²åºæ¯ä»ä¹ææï¼ - Buffer æ¯ä¸ä¸ªå¯¹è±¡ï¼ å®å å«ä¸äºè¦åå ¥æè å读åºçæ°æ®ãå¨ NIO ä¸å å ¥ Buffer 对象ï¼ä½ç°äºæ°åºä¸å I/O çä¸ä¸ªéè¦åºå«ãå¨é¢åæµç I/O ä¸ï¼æ¨å°æ°æ®ç´æ¥åå ¥æè å°æ°æ®ç´æ¥è¯»å° Stream å¯¹è±¡ä¸ - å¨ NIO åºä¸ï¼æææ°æ®é½æ¯ç¨ç¼å²åºå¤ççãå¨è¯»åæ°æ®æ¶ï¼å®æ¯ç´æ¥è¯»å°ç¼å²åºä¸çãå¨åå ¥æ°æ®æ¶ï¼å®æ¯åå ¥å°ç¼å²åºä¸çã任使¶åè®¿é® NIO ä¸çæ°æ®ï¼æ¨é½æ¯å°å®æ¾å°ç¼å²åºä¸ã - ç¼å²åºå®è´¨ä¸æ¯ä¸ä¸ªæ°ç»ãé叏宿¯ä¸ä¸ªåèæ°ç»ï¼ä½æ¯ä¹å¯ä»¥ä½¿ç¨å ¶ä»ç§ç±»çæ°ç»ã使¯ä¸ä¸ªç¼å²åºä¸ ä» ä» æ¯ä¸ä¸ªæ°ç»ãç¼å²åºæä¾äºå¯¹æ°æ®çç»æå访é®ï¼èä¸è¿å¯ä»¥è·è¸ªç³»ç»ç读/åè¿ç¨ ByteBuffer CharBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer #### 16.IOå¤è·¯å¤ç¨çåºå±åç IOå¤è·¯å¤ç¨ä½¿ç¨ä¸¤ä¸ªç³»ç»è°ç¨(select/poll/epollårecvfrom)ï¼blocking IOåªè°ç¨äºrecvfromï¼select/poll/epoll æ ¸å¿æ¯å¯ä»¥åæ¶å¤çå¤ä¸ªconnectionï¼è䏿¯æ´å¿«ï¼æä»¥è¿æ¥æ°ä¸é«çè¯ï¼æ§è½ä¸ä¸å®æ¯å¤çº¿ç¨+é»å¡IO好,å¤è·¯å¤ç¨æ¨¡åä¸ï¼æ¯ä¸ä¸ªsocketï¼è®¾ç½®ä¸ºnon-blocking,é»å¡æ¯è¢«selectè¿ä¸ªå½æ°blockï¼è䏿¯è¢«socketé»å¡çã 1ï¼selectæºå¶ 客æ·ç«¯æä½æå¡å¨æ¶å°±ä¼äº§çè¿ä¸ç§æä»¶æè¿°ç¬¦(ç®ç§°fd)ï¼writefds(å)ãreadfds(读)ãåexceptfds(å¼å¸¸)ãselectä¼é»å¡ä½çè§3ç±»æä»¶æè¿°ç¬¦ï¼çææ°æ®ãå¯è¯»ãå¯åãåºå¼å¸¸ æè¶ æ¶ãå°±ä¼è¿åï¼è¿ååéè¿éåfdsetæ´ä¸ªæ°ç»æ¥æ¾å°å°±ç»ªçæè¿°ç¬¦fdï¼ç¶åè¿è¡å¯¹åºçIOæä½ã ä¼ç¹ï¼ ããå ä¹å¨ææçå¹³å°ä¸æ¯æï¼è·¨å¹³å°æ¯ææ§å¥½ 缺ç¹ï¼ ããç±äºæ¯éç¨è½®è¯¢æ¹å¼å ¨çæ«æï¼ä¼éçæä»¶æè¿°ç¬¦FDæ°éå¢å¤èæ§è½ä¸éã ããæ¯æ¬¡è°ç¨ select()ï¼éè¦æ fd éåä»ç¨æ·ææ·è´å°å æ ¸æï¼å¹¶è¿è¡éå(æ¶æ¯ä¼ é齿¯ä»å æ ¸å°ç¨æ·ç©ºé´) ããé»è®¤å个è¿ç¨æå¼çFDæéå¶æ¯1024个ï¼å¯ä¿®æ¹å®å®ä¹ï¼ä½æ¯æçä»ç¶æ ¢ã 2ï¼pollæºå¶ åºæ¬åçä¸selectä¸è´ï¼åªæ¯æ²¡ææå¤§æä»¶æè¿°ç¬¦éå¶ï¼å 为éç¨çæ¯é¾è¡¨åå¨fdã 3ï¼epollæºå¶ epoll乿以髿§è½æ¯å¾çäºå®çä¸ä¸ªå½æ° ãã1)epoll_create()ç³»ç»å¯å¨æ¶ï¼å¨Linuxå æ ¸éé¢ç³è¯·ä¸ä¸ªB+æ ç»ææä»¶ç³»ç»ï¼è¿åepoll对象ï¼ä¹æ¯ä¸ä¸ªfd ãã2)epoll_ctl() æ¯æ°å»ºä¸ä¸ªè¿æ¥ï¼é½éè¿è¯¥å½æ°æä½epoll对象ï¼å¨è¿ä¸ªå¯¹è±¡éé¢ä¿®æ¹æ·»å å é¤å¯¹åºç龿¥fd, ç»å®ä¸ä¸ªcallback彿°ã ãã3)epoll_wait() è½®è®ææçcallbackéåï¼å¹¶å®æå¯¹åºçIOæä½ ä¼ç¹ï¼ ããæ²¡fdè¿ä¸ªéå¶ï¼ææ¯æçFDä¸éæ¯æä½ç³»ç»çæå¤§æä»¶å¥ææ°ï¼1Gå åå¤§æ¦æ¯æ10ä¸ä¸ªå¥æ ããæçæé«ï¼ä½¿ç¨åè°éç¥è䏿¯è½®è¯¢çæ¹å¼ï¼ä¸ä¼éçFDæ°ç®çå¢å æçä¸é ããå æ ¸åç¨æ·ç©ºé´mmapåä¸åå åå®ç° ### åè龿¥ https://zhuanlan.zhihu.com/p/124230020 https://blog.csdn.net/chengyuqiang/article/details/79183748 https://www.wkcto.com/article/detail/259 https://www.cnblogs.com/lanqingzhou/p/13609317.html https://www.imooc.com/article/265871 https://blog.csdn.net/chenwiehuang/article/details/105296691