Node.js 的發明人 Ryan Dahl 在 Yahoo 介紹 Node.js (2010)

Node.js主要專注在Performance。Node的特點是對I/O有特別的處理方式,特別快。 在有100個client下,每次回應1MB的Benchmark node  822 reqs/secs nginx 7xx reqs/secs others  1x reqs/secs node用javascript寫,但居然跑的比純C寫的nginx還要快!!! nginx快的原因是它不用一個Process來接處理一個 client,而是用Event Loop。 All about non-blocking I/O non-blocking I/O:   L1 / L2 / L3/Memory <             250 cycles blocking I/O:          disk / network           > 41,000,000 cycles (ex: select .. from database) 應該用不同的方式來處理這兩種I/O,他們從根本上根本不一樣。L1 cache像是拉開抽屜拿東西,存取memory像是到樓下買個東西回來,但從硬碟上拿東西像是跳上飛機、飛到地球的另一邊再飛回來一樣。 要用non-blocking I/O,就要全部的API Call都用non-blocking I/O,即時用了第三方的程式庫去存取資料庫,可能就變成blocking I/O了。要實現的方法有幾種,event loop、using callback function。 database_query("select ...",  callback function); //應該這樣做 但是大部份的語言都不預設這種寫程式的方式,如果要達成這種功能,通常要花很大的心力,最後大部份程式員最多就做到多個執行緒,然用用一個執行緒去處理一個I/O Operation。 但Javascript是個特別的例外,因為這語言從第一天就一直在處理瀏覽器的Event Loop,**callback function、anonymous function、Closure **是在平常也不過的方法了。Javascript的文化就是Event Programming。 Node.js 就是讓你單純只用Event、non-blocking的infrastructure來寫高度concurrent的程式。設計的目標是任何的function都不能直接存取I/O,一定要用callback的function來處理。其他特性還有專注在Low level、什麼都用串流、不強迫buffering、提供DNS/HTTP/TLS的內建支援。 HTTP包含: Chunked encoding, Pipelined message, hanging message. Node的API要用client side JS Programmer熟悉的慣例,幾乎100% MIT/BSD Licensed。(唯一例外是openssl) 架構 Javascript               Node standard library ------------------------------------------------------------                                Node binding C                             -------------------------------------                                V8   Thread pool & event pool

努力把使用者關在non-blocking的環境,用C語言當作屏障… XD

Node execution stack : only one stack

load(index.html) &nbsp; &nbsp;
http_parse(1) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;

socket_readable(1)
ev_loop &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| |
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;V

file_loaded() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
ev_loop &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;

然後是一大堆的小段程式範例。
包含web server和 file system的non-blocking I/O.
然後是2010年接下來的 Road Map。