1. 程式人生 > >來源於知乎大神對node.js的形象理解

來源於知乎大神對node.js的形象理解

data- tro 茶葉 wrap htm 小學 .com 安排 nal

先復習小學語文課文,華羅庚的《統籌方法》。

比如,想泡壺茶喝。當時的情況是:開水沒有;水壺要洗,茶壺茶杯要洗;火生了,茶葉也有了。怎麽辦?
辦法甲:洗好水壺,灌上涼水,放在火上;在等待水開的時間裏,洗茶壺、洗茶杯、拿茶葉;等水開了,泡茶喝。
辦法乙:先做好一些準備工作,洗水壺,洗茶壺茶杯,拿茶葉;一切就緒,灌水燒水;坐待水開了泡茶喝。
辦法丙:洗凈水壺,灌上涼水,放在火上,坐待水開;水開了之後,急急忙忙找茶葉,洗茶壺茶杯,泡茶喝。
哪一種辦法省時間?我們能一眼看出第一種辦法好,後兩種辦法都窩了工。
...
從這個圖上可以一眼看出,辦法甲總共要16分鐘(而辦法乙、丙需要20分鐘)。
...
看來這是“小題大做”,但在工作環節太多的時候,這樣做就非常有必要了。
...
來源:華羅庚 統籌方法_百度文庫

Node.js就是跟華羅庚一夥的,幫助我們更快地沏茶,而且更快地給一幫人沏茶。

我們在用瀏覽器訪問服務器的時候,就好像去茶葉鋪買茶喝。我們可以買回來自己沏,也可以在店裏自帶的茶座兒坐下來喝現成的。

如果我們買回來喝,參考華老師的課文,他自己都說了這是「小題大作」,因為16分鐘和20分鐘差不了太多,就我們自己和家人,慢生活4分鐘也沒什麽毛病。

但是如果我們在店裏喝,那可不是咱一家兒等著。比起16分鐘的最少等候時間,第一桌多等4分鐘,第二桌要同時來的話得多等24分鐘,第三桌站起來走了,20多張桌子都閑著。忙活了半天,茶客不耐煩,茶鋪不賺錢。

所以,茶葉鋪一定要學好小學課文,不僅對於同一桌的不同請求要統籌安排,別認死理一件事不幹完絕不開始下一件

,甚至對於不同桌的不同請求也要盡量並行處理,比如等開水時可以幫好幾桌點單、拿茶葉、洗茶杯茶壺,水開之前別閑著,水一開就給各桌上茶,讓每桌客人都感覺嗖快嗖快的。

在這個故事裏,茶葉鋪就是網絡服務器。我們自己就是瀏覽器。

我們要是不想瀏覽器事必躬親,那就把活扔給服務器幹;當服務器一下子服務很多瀏覽器時就不能認死理非要串行操作,要靈活統籌,同時開始幾件事,哪件完事關閉哪件。

這三個特征用江湖切口說就叫:

  • 服務器端JavaScript處理:server-side JavaScript execution
  • 非阻斷/異步I/O:non-blocking or asynchronous I/O
  • 事件驅動:Event-driven

Node.js就是這樣一個服務器端的、非阻斷式I/O的、事件驅動的JavaScript運行環境。

來源於知乎大神對node.js的形象理解