node.js中與生俱來的單線程編程、回調函數異步式風格讓我們有時喜有時憂。先說單線程,很多人會費解于node.js的單線程如何能做到高并發?這個問題不是本文重點,點到為止。澄清一點,node.js的單線程僅僅指javascript引擎是單線程的,無論如何我們沒有辦法在javascript中實現多線程和阻塞(本文用到的方法同樣不是通過V8引擎實現同步的);但對于node.js的其他方面不代表不能多線程,例如IO。如果現在node.js遭受大量請求,而這些請求都是IO密集型的,那么此時node每接受一個請求,在遇到耗時較長的IO操作時,javascript線程并不會一直在此等待,而是交出控制,在回調堆棧里添加IO操作完成后要執行的操作(當回調層級過多,訪問數量過大,大量的回調鏈可能會爆棧)。而在這段時間內,node.js又可以處理其他請求了。所以對于node.js而言,雖然javascript是單線程的,每次只能處理一個請求,但javascript處理一個請求的時間往往較短(對于IO密集型應用而言),只要可以異步處理,那么在處理的過程中,此次請求都會釋放控制,使node.js能處理其他請求。這并發請求的同時,IO其實一直處于并發狀態,減少處理請求的線程數,節約資源以增加IO的線程數,對于通常耗時很長的IO密集型請求來說,無疑能帶來性能上的提升。
前面 主站蜘蛛池模板: 乡城县| 资兴市| 莎车县| 长宁县| 营山县| 出国| 太仓市| 衡南县| 舞钢市| 红河县| 项城市| 花莲县| 绍兴县| 千阳县| 江门市| 蒙城县| 许昌市| 花莲县| 鲁甸县| 湟源县| 嘉义县| 库车县| 成都市| 古丈县| 驻马店市| 漠河县| 家居| 济源市| 渭南市| 鄂托克旗| 武鸣县| 孝感市| 灌阳县| 福贡县| 姜堰市| 杭锦后旗| 洛扎县| 海口市| 曲沃县| 青神县| 商南县|