Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Node.jsµÄÒì²½I/O
 
À´Ô´£ºcsdn ·¢²¼ÓÚ£º2017-8-30
  2399  次浏览      27
 

Ò»¡¢Node.jsÒì²½I/OµÄʵÏÖÔ­Àí

1.ʼþÑ­»·

Ê×ÏÈ£¬ÎÒÃÇ×ÅÖØÇ¿µ÷Ò»ÏÂNode×ÔÉíµÄÖ´ÐÐÄ£ÐÍ¡ª¡ªÊ¼þÑ­»·£¬ÕýÊÇËüʹµÃ»Øµ÷º¯ÊýÊ®·ÖÆÕ±é¡£

ÔÚ½ø³ÌÆô¶¯Ê±£¬Node±ã»á´´½¨Ò»¸öÀàËÆÓÚwhile(true)µÄÑ­»·£¬Ã¿Ö´ÐÐÒ»´ÎÑ­»·ÌåµÄ¹ý³ÌÎÒÃdzÆÎªTick¡£Ã¿¸öTickµÄ¹ý³Ì¾ÍÊDz鿴ÊÇ·ñÓÐʼþ´ý´¦Àí£¬Èç¹ûÓУ¬¾ÍÈ¡³öʼþ¼°ÆäÏà¹ØµÄ»Øµ÷º¯Êý¡£Èç¹û´æÔÚ¹ØÁªµÄ»Øµ÷º¯Êý£¬¾ÍÖ´ÐÐËüÃÇ¡£È»ºó½øÈëϸöÑ­»·£¬Èç¹û²»ÔÙÓÐʼþ´¦Àí£¬¾ÍÍ˳ö½ø³Ì¡£Á÷³ÌͼÈçͼ3-11Ëùʾ¡£

2.¹Û²ìÕß

ÔÚÿ¸öTickµÄ¹ý³ÌÖУ¬ÈçºÎÅжÏÊÇ·ñÓÐʼþÐèÒª´¦ÀíÄØ£¿ÕâÀï±ØÐëÒªÒýÈëµÄ¸ÅÄîÊǹ۲ìÕß¡£

ÿ¸öʼþÑ­»·ÖÐÓÐÒ»¸ö»òÕß¶à¸ö¹Û²ìÕߣ¬¶øÅжÏÊÇ·ñÓÐʼþÒª´¦ÀíµÄ¹ý³Ì¾ÍÊÇÏòÕâЩ¹Û²ìÕßѯÎÊÊÇ·ñÓÐÒª´¦ÀíµÄʼþ¡£

ä¯ÀÀÆ÷²ÉÓÃÁËÀàËÆµÄ»úÖÆ¡£Ê¼þ¿ÉÄÜÀ´×ÔÓû§µÄµã»÷»òÕß¼ÓÔØÄ³Ð©Îļþʱ²úÉú£¬¶øÕâЩ²úÉúµÄʼþ¶¼ÓжÔÓ¦µÄ¹Û²ìÕß¡£ÔÚNodeÖУ¬Ê¼þÖ÷ÒªÀ´Ô´ÓÚÍøÂçÇëÇó¡¢ÎļþI/OµÈ£¬ÕâЩʼþ¶ÔÓ¦µÄ¹Û²ìÕßÓÐÎļþI/O¹Û²ìÕß¡¢ÍøÂçI/O¹Û²ìÕߵȡ£¹Û²ìÕß½«Ê¼þ½øÐÐÁË·ÖÀà¡£

ʼþÑ­»·ÊÇÒ»¸öµäÐ͵ÄÉú²úÕß/Ïû·ÑÕßÄ£ÐÍ¡£Òì²½I/O¡¢ÍøÂçÇëÇóµÈÔòÊÇʼþµÄÉú²úÕߣ¬Ô´Ô´²»¶ÏΪNodeÌṩ²»Í¬ÀàÐ͵Äʼþ£¬ÕâЩʼþ±»´«µÝµ½¶ÔÓ¦µÄ¹Û²ìÕßÄÇÀʼþÑ­»·Ôò´Ó¹Û²ìÕßÄÇÀïÈ¡³öʼþ²¢´¦Àí¡£

ÔÚWindowsÏ£¬Õâ¸öÑ­»·»ùÓÚIOCP´´½¨£¬¶øÔÚ*nixÏÂÔò»ùÓÚ¶àÏ̴߳´½¨¡£

3.ÇëÇó¶ÔÏó

ÎÒÃǽ«Í¨¹ý½âÊÍWindowsÏÂÒì²½I/O£¨ÀûÓÃIOCPʵÏÖ£©µÄ¼òµ¥Àý×ÓÀ´Ì½Ñ°´ÓJavaScript´úÂ뵽ϵͳÄÚºËÖ®¼ä¶¼·¢ÉúÁËʲô¡£

¶ÔÓÚÒ»°ãµÄ£¨·ÇÒì²½£©»Øµ÷º¯Êý£¬º¯ÊýÓÉÎÒÃÇ×ÔÐе÷Óã¬ÈçÏÂËùʾ£º

var forEach = function (list, callback) {
for (var i = 0; i < list.length; i++) {
callback(list[i], i, list);
}
};

¶ÔÓÚNodeÖеÄÒì²½I/Oµ÷ÓöøÑÔ£¬»Øµ÷º¯ÊýÈ´²»ÓÉ¿ª·¢ÕßÀ´µ÷Óá£ÄÇô´ÓÎÒÃÇ·¢³öµ÷Óú󣬵½»Øµ÷º¯Êý±»Ö´ÐУ¬Öм䷢ÉúÁËÊ²Ã´ÄØ£¿

ÊÂʵÉÏ£¬´ÓJavaScript·¢Æðµ÷Óõ½ÄÚºËÖ´ÐÐÍêI/O²Ù×÷µÄ¹ý¶É¹ý³ÌÖУ¬´æÔÚÒ»ÖÖÖмä²úÎËü½Ð×öÇëÇó¶ÔÏó¡£

ÏÂÃæÎÒÃÇÒÔ×î¼òµ¥µÄfs.open()·½·¨À´×÷ΪÀý×Ó£¬Ì½Ë÷NodeÓëµ×²ãÖ®¼äÊÇÈçºÎÖ´ÐÐÒì²½I/Oµ÷ÓÃÒÔ¼°»Øµ÷º¯Êý¾¿¾¹ÊÇÈçºÎ±»µ÷ÓÃÖ´Ðеģº

fs.open = function(path, flags, mode, callback) {
// ...
binding.open(pathModule._makeLong(path),
stringToFlags(flags),
mode,
callback);
};;

fs.open()µÄʵ¼Êµ÷ÓÃÕ»£º

´ÓJavaScriptµ÷ÓÃNodeµÄºËÐÄÄ£¿é£¬ºËÐÄÄ£¿éµ÷ÓÃC++ÄÚ½¨Ä£¿é£¬ÄÚ½¨Ä£¿éͨ¹ýlibuv½øÐÐϵͳµ÷Óã¬ÕâÊÇNodeÀï¾­µäµÄµ÷Ó÷½Ê½¡£ÕâÀïlibuv×÷Ϊ·â×°²ã£¬ÓÐÁ½¸öƽ̨µÄʵÏÖ£¬ÊµÖÊÉÏÊǵ÷ÓÃÁËuv_fs_open()·½·¨¡£ÔÚuv_fs_open()µÄµ÷Óùý³ÌÖУ¬ÎÒÃÇ´´½¨ÁËÒ»¸öFSReqWrapÇëÇó¶ÔÏó¡£´ÓJavaScript²ã´«ÈëµÄ²ÎÊýºÍµ±Ç°·½·¨¶¼±»·â×°ÔÚÕâ¸öÇëÇó¶ÔÏóÖУ¬ÆäÖÐÎÒÃÇ×îΪ¹Ø×¢µÄ»Øµ÷º¯ÊýÔò±»ÉèÖÃÔÚÕâ¸ö¶ÔÏóµÄoncomplete_symÊôÐÔÉÏ£º

req_wrap->object_->Set(oncomplete_sym, callback);

¶ÔÏó°ü×°Íê±Ïºó£¬ÔÚWindowsÏ£¬Ôòµ÷ÓÃQueueUserWorkItem()·½·¨½«Õâ¸öFSReqWrap¶ÔÏóÍÆÈëÏ̳߳ØÖеȴýÖ´ÐУ¬¸Ã·½·¨µÄ´úÂëÈçÏÂËùʾ£º

QueueUserWorkItem(&uv_fs_thread_proc, req, WT_EXECUTEDEFAULT)

ÖÁ´Ë£¬JavaScriptµ÷ÓÃÁ¢¼´·µ»Ø£¬ÓÉJavaScript²ãÃæ·¢ÆðµÄÒì²½µ÷ÓõĵÚÒ»½×¶Î¾Í´Ë½áÊø¡£JavaScriptÏ߳̿ÉÒÔ¼ÌÐøÖ´Ðе±Ç°ÈÎÎñµÄºóÐø²Ù×÷¡£µ±Ç°µÄI/O²Ù×÷ÔÚÏ̳߳ØÖеȴýÖ´ÐУ¬²»¹ÜËüÊÇ·ñ×èÈûI/O£¬¶¼²»»áÓ°Ïìµ½JavaScriptÏ̵߳ĺóÐøÖ´ÐУ¬Èç´Ë¾Í´ïµ½ÁËÒì²½µÄÄ¿µÄ¡£

ÇëÇó¶ÔÏóÊÇÒì²½I/O¹ý³ÌÖеÄÖØÒªÖмä²úÎËùÓеÄ״̬¶¼±£´æÔÚÕâ¸ö¶ÔÏóÖУ¬°üÀ¨ËÍÈëÏ̳߳صȴýÖ´ÐÐÒÔ¼°I/O²Ù×÷Íê±ÏºóµÄ»Øµ÷´¦Àí¡£

4.Ö´Ðлص÷

×é×°ºÃÇëÇó¶ÔÏó¡¢ËÍÈëI/OÏ̳߳صȴýÖ´ÐУ¬Êµ¼ÊÉÏÍê³ÉÁËÒì²½I/OµÄµÚÒ»²¿·Ö£¬»Øµ÷֪ͨÊǵڶþ²¿·Ö¡£

Ï̳߳ØÖеÄI/O²Ù×÷µ÷ÓÃÍê±ÏÖ®ºó£¬»á½«»ñÈ¡µÄ½á¹û´¢´æÔÚreq->resultÊôÐÔÉÏ£¬È»ºóµ÷ÓÃPostQueuedCompletionStatus()֪ͨIOCP£¬¸æÖªµ±Ç°¶ÔÏó²Ù×÷ÒѾ­Íê³É¡£PostQueuedCompletionStatus()·½·¨µÄ×÷ÓÃÊÇÏòIOCPÌá½»Ö´ÐÐ״̬£¬²¢½«Ï̹߳黹Ï̳߳ء£Í¨¹ýPostQueuedCompletionStatus()·½·¨Ìá½»µÄ״̬£¬¿ÉÒÔͨ¹ýGetQueuedCompletionStatus()ÌáÈ¡¡£

ÔÚÕâ¸ö¹ý³ÌÖУ¬ÎÒÃÇÆäʵ»¹¶¯ÓÃÁËʼþÑ­»·µÄI/O¹Û²ìÕß¡£ÔÚÿ´ÎTickµÄÖ´ÐÐÖУ¬Ëü»áµ÷ÓÃIOCPÏà¹ØµÄGetQueuedCompletionStatus()·½·¨¼ì²éÏ̳߳ØÖÐÊÇ·ñÓÐÖ´ÐÐÍêµÄÇëÇó£¬Èç¹û´æÔÚ£¬»á½«ÇëÇó¶ÔÏó¼ÓÈëµ½I/O¹Û²ìÕߵĶÓÁÐÖУ¬È»ºó½«Æäµ±×öʼþ´¦Àí¡£

I/O¹Û²ìÕ߻ص÷º¯ÊýµÄÐÐΪ¾ÍÊÇÈ¡³öÇëÇó¶ÔÏóµÄresultÊôÐÔ×÷Ϊ²ÎÊý£¬È¡³öoncomplete_symÊôÐÔ×÷Ϊ·½·¨£¬È»ºóµ÷ÓÃÖ´ÐУ¬ÒÔ´Ë´ïµ½µ÷ÓÃJavaScriptÖд«ÈëµÄ»Øµ÷º¯ÊýµÄÄ¿µÄ¡£

ÖÁ´Ë£¬Õû¸öÒì²½I/OµÄÁ÷³ÌÍêÈ«½áÊø£¬Èçͼ3-13Ëùʾ¡£

5.×ܽá

Òì²½I/OµÄ¼¸¸ö¹Ø¼ü´Ê£ºµ¥Ï̡߳¢Ê¼þÑ­»·¡¢¹Û²ìÕߺÍI/OÏ̳߳ء£

ÕâÀïµ¥Ïß³ÌÓëI/OÏ̳߳ØÖ®¼ä¿´ÆðÀ´ÓÐЩã£ÂÛµÄÑù×Ó¡£ÓÉÓÚÎÒÃÇÖªµÀjavascriptÊǵ¥Ï̵߳ģ¬ËùÒÔ°´³£Ê¶ºÜÈÝÒ×Àí½âΪËü²»Äܳä·ÖÀûÓöàºËCPU¡£ÊÂʵÉÏ£¬ÔÚNodeÖУ¬³ýÁËJavaScriptÊǵ¥Ïß³ÌÍ⣬Node×ÔÉíÆäʵÊǶàÏ̵߳ģ¬Ö»ÊÇI/OÏß³ÌʹÓõÄCPU½ÏÉÙ¡£ÁíÒ»¸öÐèÒªÖØÊӵĹ۵ãÔòÊÇ£¬³ýÁËÓû§´úÂëÎÞ·¨²¢ÐÐÖ´ÐÐÍ⣬ËùÓеÄI/O£¨´ÅÅÌI/OºÍÍøÂçI/OµÈ£©ÔòÊÇ¿ÉÒÔ²¢ÐÐÆðÀ´µÄ¡£

¶þ¡¢·ÇI/OµÄÒì²½API

setTimeout()¡¢setInterval()¡¢setImmediate()ºÍprocess.nextTick()¡£

1.¶¨Ê±Æ÷

setTimeout()ºÍsetInterval()Óëä¯ÀÀÆ÷ÖеÄAPIÊÇÒ»Öµģ¬·Ö±ðÓÃÓÚµ¥´ÎºÍ¶à´Î¶¨Ê±Ö´ÐÐÈÎÎñ¡£ËüÃǵÄʵÏÖÔ­ÀíÓëÒì²½I/O±È½ÏÀàËÆ£¬Ö»ÊDz»ÐèÒªI/OÏ̳߳صIJÎÓë¡£

µ÷ÓÃsetTimeout()»òÕßsetInterval()´´½¨µÄ¶¨Ê±Æ÷»á±»²åÈëµ½¶¨Ê±Æ÷¹Û²ìÕßÄÚ²¿µÄÒ»¸öºìºÚÊ÷ÖС£Ã¿´ÎTickÖ´ÐÐʱ£¬»á´Ó¸ÃºìºÚÊ÷Öеü´úÈ¡³ö¶¨Ê±Æ÷¶ÔÏ󣬼ì²éÊÇ·ñ³¬¹ý¶¨Ê±Ê±¼ä£¬Èç¹û³¬¹ý£¬¾ÍÐγÉÒ»¸öʼþ£¬ËüµÄ»Øµ÷º¯Êý½«Á¢¼´Ö´ÐС£

ͼ3-14Ìáµ½µÄÖ÷ÒªÊÇsetTimeout()µÄÐÐΪ¡£setInterval()ÓëÖ®Ïàͬ£¬Çø±ðÔÚÓÚºóÕßÊÇÖØ¸´ÐԵļì²âºÍÖ´ÐС£

¶¨Ê±Æ÷µÄÎÊÌâÔÚÓÚ£¬Ëü²¢·Ç¾«È·µÄ£¨ÔÚÈÝÈÌ·¶Î§ÄÚ£©¡£¾¡¹ÜʼþÑ­»·Ê®·Ö¿ì£¬µ«ÊÇÈç¹ûijһ´ÎÑ­»·Õ¼ÓõÄʱ¼ä½Ï¶à£¬ÄÇôÏ´ÎÑ­»·Ê±£¬ËüÒ²ÐíÒѾ­³¬Ê±ºÜ¾ÃÁË¡£Æ©Èçͨ¹ýsetTimeout()É趨һ¸öÈÎÎñÔÚ10ºÁÃëºóÖ´ÐУ¬µ«ÊÇÔÚ9ºÁÃëºó£¬ÓÐÒ»¸öÈÎÎñÕ¼ÓÃÁË5ºÁÃëµÄCPUʱ¼äƬ£¬ÔÙ´ÎÂÖµ½¶¨Ê±Æ÷Ö´ÐÐʱ£¬Ê±¼ä¾ÍÒѾ­¹ýÆÚ4ºÁÃë¡£

2.process.nextTick()

ÓÉÓÚʼþÑ­»·×ÔÉíµÄÌØµã£¬¶¨Ê±Æ÷µÄ¾«È·¶È²»¹»¡£¶øÊÂʵÉÏ£¬²ÉÓö¨Ê±Æ÷ÐèÒª¶¯ÓúìºÚÊ÷£¬´´½¨¶¨Ê±Æ÷¶ÔÏóºÍµü´úµÈ²Ù×÷£¬¶øsetTimeout(fn, 0)µÄ·½Ê½½ÏΪÀË·ÑÐÔÄÜ¡£

ʵ¼ÊÉÏ£¬process.nextTick()·½·¨µÄ²Ù×÷Ïà¶Ô½ÏΪÇáÁ¿£¬¾ßÌå´úÂëÈçÏ£º


process.nextTick = function(callback) {
// on the way out, don't bother.
// it won't get fired anyway
if (process._exiting) return;

if (tickDepth >= process.maxTickDepth)
maxTickWarn();

var tock = { callback: callback };
if (process.domain) tock.domain = process.domain;
nextTickQueue.push(tock);
if (nextTickQueue.length) {
process._needTickCallback();
}
};

ÿ´Îµ÷ÓÃprocess.nextTick()·½·¨£¬Ö»»á½«»Øµ÷º¯Êý·ÅÈë¶ÓÁÐÖУ¬ÔÚÏÂÒ»ÂÖTickʱȡ³öÖ´ÐС£

¶¨Ê±Æ÷ÖвÉÓúìºÚÊ÷µÄ²Ù×÷ʱ¼ä¸´ÔÓ¶ÈΪO(lg(n))£¬nextTick()µÄʱ¼ä¸´ÔÓ¶ÈΪO(1)¡£Ïà½Ï֮ϣ¬process.nextTick()¸ü¸ßЧ¡£

3.setImmediate()

setImmediate()·½·¨Óëprocess.nextTick()·½·¨Ê®·ÖÀàËÆ£¬¶¼Êǽ«»Øµ÷º¯ÊýÑÓ³ÙÖ´ÐС£

process.nextTick()ÖеĻص÷º¯ÊýÖ´ÐеÄÓÅÏȼ¶Òª¸ßÓÚsetImmediate()¡£

Ô­ÒòÔÚÓÚʼþÑ­»·¶Ô¹Û²ìÕߵļì²éÊÇÓÐÏȺó˳ÐòµÄ£¬process.nextTick()ÊôÓÚidle¹Û²ìÕߣ¬setImmediate()ÊôÓÚcheck¹Û²ìÕß¡£ÔÚÿһ¸öÂÖÑ­»·¼ì²éÖУ¬idle¹Û²ìÕßÏÈÓÚI/O¹Û²ìÕߣ¬I/O¹Û²ìÕßÏÈÓÚcheck¹Û²ìÕß¡£

ÔÚ¾ßÌåʵÏÖÉÏ£¬process.nextTick()µÄ»Øµ÷º¯Êý±£´æÔÚÒ»¸öÊý×éÖУ¬setImmediate()µÄ½á¹ûÔòÊDZ£´æÔÚÁ´±íÖС£ÔÚÐÐΪÉÏ£¬process.nextTick()ÔÚÿÂÖÑ­»·ÖлὫÊý×éÖеĻص÷º¯ÊýÈ«²¿Ö´ÐÐÍ꣬¶øsetImmediate()ÔÚÿÂÖÑ­»·ÖÐÖ´ÐÐÁ´±íÖеÄÒ»¸ö»Øµ÷º¯Êý¡£


// ¼ÓÈëÁ½¸önextTick()µÄ»Øµ÷º¯Êý
process.nextTick(function () {
console.log('nextTickÑÓ³ÙÖ´ÐÐ1');
});
process.nextTick(function () {
console.log('nextTickÑÓ³ÙÖ´ÐÐ2');
});
// ¼ÓÈëÁ½¸ösetImmediate()µÄ»Øµ÷º¯Êý
setImmediate(function () {
console.log('setImmediateÑÓ³ÙÖ´ÐÐ1');
// ½øÈëÏ´ÎÑ­»·
process.nextTick(function () {
console.log('Ç¿ÊÆ²åÈë');
});
});
setImmediate(function () {
console.log('setImmediateÑÓ³ÙÖ´ÐÐ2');
});
console.log('Õý³£Ö´ÐÐ');

ÆäÖ´Ðнá¹ûÈçÏ£º

Õý³£Ö´ÐÐ

nextTickÑÓ³ÙÖ´ÐÐ1

nextTickÑÓ³ÙÖ´ÐÐ2

setImmediateÑÓ³ÙÖ´ÐÐ1

Ç¿ÊÆ²åÈë

setImmediateÑÓ³ÙÖ´ÐÐ2

´ÓÖ´Ðнá¹ûÉÏ¿ÉÒÔ¿´³ö£¬µ±µÚÒ»¸ösetImmediate()µÄ»Øµ÷º¯ÊýÖ´Ðк󣬲¢Ã»ÓÐÁ¢¼´Ö´Ðеڶþ¸ö£¬¶øÊǽøÈëÁËÏÂÒ»ÂÖÑ­»·£¬Ôٴΰ´process.nextTick()ÓÅÏÈ¡¢setImmediate()´ÎºóµÄ˳ÐòÖ´ÐС£

Ö®ËùÒÔÕâÑùÉè¼Æ£¬ÊÇΪÁ˱£Ö¤Ã¿ÂÖÑ­»·Äܹ»½Ï¿ìµØÖ´ÐнáÊø£¬·ÀÖ¹CPUÕ¼Óùý¶à¶ø×èÈûºóÐøI/Oµ÷ÓõÄÇé¿ö¡£

Èý¡¢Ê¼þÇý¶¯Óë¸ßÐÔÄÜ·þÎñÆ÷

Òì²½I/O²»½ö½öÓ¦ÓÃÔÚÎļþ²Ù×÷ÖС£¶ÔÓÚÍøÂçÌ×½Ó×ֵĴ¦Àí£¬NodeÒ²Ó¦Óõ½ÁËÒì²½I/O£¬ÍøÂçÌ×½Ó×ÖÉÏÕìÌýµ½µÄÇëÇó¶¼»áÐγÉʼþ½»¸øI/O¹Û²ìÕß¡£Ê¼þÑ­»·»á²»Í£µØ´¦ÀíÕâÐ©ÍøÂçI/Oʼþ¡£Èç¹ûJavaScriptÓд«Èë»Øµ÷º¯Êý£¬ÕâЩʼþ½«»á×îÖÕ´«µÝµ½ÒµÎñÂß¼­²ã½øÐд¦Àí¡£ÀûÓÃNode¹¹½¨Web·þÎñÆ÷£¬ÕýÊÇÔÚÕâÑùÒ»¸ö»ù´¡ÉÏʵÏֵ쬯äÁ÷³ÌͼÈçͼ3-15Ëùʾ¡£

ÏÂÃæÎª¼¸ÖÖ¾­µäµÄ·þÎñÆ÷Ä£ÐÍ£¬ÕâÀï¶Ô±ÈÏÂËüÃǵÄÓÅȱµã¡£

ͬ²½Ê½

¶ÔÓÚͬ²½Ê½µÄ·þÎñ£¬Ò»´ÎÖ»ÄÜ´¦ÀíÒ»¸öÇëÇ󣬲¢ÇÒÆäÓàÇëÇó¶¼´¦Óڵȴý״̬¡£

ÿ½ø³Ì/ÿÇëÇó

Ϊÿ¸öÇëÇóÆô¶¯Ò»¸ö½ø³Ì£¬ÕâÑù¿ÉÒÔ´¦Àí¶à¸öÇëÇ󣬵«ÊÇËü²»¾ß±¸À©Õ¹ÐÔ£¬ÒòΪϵͳ×ÊÔ´Ö»ÓÐÄÇô¶à¡£

ÿÏß³Ì/ÿÇëÇó

Ϊÿ¸öÇëÇóÆô¶¯Ò»¸öÏß³ÌÀ´´¦Àí¡£¾¡¹ÜÏ̱߳Ƚø³ÌÒªÇáÁ¿£¬µ«ÊÇÓÉÓÚÿ¸öÏ̶߳¼Õ¼ÓÃÒ»¶¨Äڴ棬µ±´ó²¢·¢ÇëÇóµ½À´Ê±£¬Äڴ潫»áºÜ¿ìÓù⣬µ¼Ö·þÎñÆ÷»ºÂý¡£Ã¿Ïß³Ì/ÿÇëÇóµÄÀ©Õ¹ÐÔ±Èÿ½ø³Ì/ÿÇëÇóµÄ·½Ê½ÒªºÃ£¬µ«¶ÔÓÚ´óÐÍÕ¾µã¶øÑÔÒÀÈ»²»¹»¡£

ÿÏß³Ì/ÿÇëÇóµÄ·½Ê½Ä¿Ç°»¹±»ApacheËù²ÉÓá£Nodeͨ¹ýʼþÇý¶¯µÄ·½Ê½´¦ÀíÇëÇó£¬ÎÞÐëΪÿһ¸öÇëÇó´´½¨¶îÍâµÄ¶ÔÓ¦Ị̈߳¬¿ÉÒÔÊ¡µô´´½¨Ï̺߳ÍÏú»ÙÏ̵߳ĿªÏú£¬Í¬Ê±²Ù×÷ϵͳÔÚµ÷¶ÈÈÎÎñʱÒòΪÏ߳̽ÏÉÙ£¬ÉÏÏÂÎÄÇл»µÄ´ú¼ÛºÜµÍ¡£ÕâʹµÃ·þÎñÆ÷Äܹ»ÓÐÌõ²»Îɵش¦ÀíÇëÇ󣬼´Ê¹ÔÚ´óÁ¿Á¬½ÓµÄÇé¿öÏ£¬Ò²²»ÊÜÏß³ÌÉÏÏÂÎÄÇл»¿ªÏúµÄÓ°Ï죬ÕâÊÇNode¸ßÐÔÄܵÄÒ»¸öÔ­Òò¡£

ʼþÇý¶¯´øÀ´µÄ¸ßЧÒѾ­½¥½¥¿ªÊ¼ÎªÒµ½çËùÖØÊÓ¡£ÖªÃû·þÎñÆ÷Nginx£¬Ò²ÞðÆúÁ˶àÏ̵߳ķ½Ê½£¬²ÉÓÃÁ˺ÍNodeÏàͬµÄʼþÇý¶¯¡£Èç½ñ£¬Nginx´óÓÐÈ¡´úApacheÖ®ÊÆ¡£Node¾ßÓÐÓëNginxÏàͬµÄÌØÐÔ£¬²»Í¬Ö®´¦ÔÚÓÚNginx²ÉÓô¿Cд³É£¬ÐÔÄܽϸߣ¬µ«ÊÇËü½öÊʺÏÓÚ×öWeb·þÎñÆ÷£¬ÓÃÓÚ·´Ïò´úÀí»ò¸ºÔؾùºâµÈ·þÎñ£¬ÔÚ´¦Àí¾ßÌåÒµÎñ·½Ãæ½ÏΪǷȱ¡£NodeÔòÊÇÒ»Ì׸ßÐÔÄܵį½Ì¨£¬¿ÉÒÔÀûÓÃËü¹¹½¨ÓëNginxÏàͬµÄ¹¦ÄÜ£¬Ò²¿ÉÒÔ´¦Àí¸÷ÖÖ¾ßÌåÒµÎñ£¬¶øÇÒÓë±³ºóµÄÍøÂç±£³ÖÒì²½³©Í¨¡£Á½ÕßÏà±È£¬NodeûÓÐNginxÔÚWeb·þÎñÆ÷·½ÃæÄÇôרҵ£¬µ«³¡¾°¸ü´ó£¬×ÔÉíÐÔÄÜÒ²²»´í¡£ÔÚʵ¼ÊÏîÄ¿ÖУ¬ÎÒÃÇ¿ÉÒÔ½áºÏËüÃǸ÷×ÔÓŵ㣬ÒÔ´ïµ½Ó¦ÓõÄ×îÓÅÐÔÄÜ¡£

   
2399 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì