Re: [問題] Node.js在處理非同步機制的架構問題

作者: danny8376 (釣到一隻猴子@_@)   2014-04-26 23:01:27
※ 引述《yragggc (逼繩)》之銘言:
: 想請問Node.js在處理非同步機制的架構問題
: 於Node.js的APP, 可以使用
: process.nextTick()
: child_process.fork()
: Cluster
: 這幾個方式來處理CPU-bound的task
: 但我的理解, 應該是由libuv去處理所有關於分配thread的問題
: 也就是抽象化後, 讓使用者只需要專注於single-thread程式的開發
: 而不是開發者手動去fork process?
這邊不大能說有問題
不過有一點要搞清楚
async主體仍然是single thread
也就是同時間只能跑一段code
而對大多數的狀況來說這個"一段"
通常就是一個function/method
(因為一個function處理完至少代表告一段落)
你今天資料收到後需要做一個cpu-bound的task的時候
正常人大概會全部寫在同一個function裡面
但如果在async的狀況下會變成這整個task結束前
(因為上面說的,reactor一次CPU time就配給一整個function)
整個main thread(也就是整隻程式)會被這個task block住
所以你必須要讓reactor知道其實這個運算途中可以讓別人插進來
而上方列的從上而下分別
reactor處理,仍然單thread單core,自己把整個運算拆成好幾個function來算
process處理,可以多core (JS因為沒thread的概念,所以就跳這麼多了XD)
同樣process處理,不過是比較高階的wrapper,很多東西都幫你處理好了
後兩者就是丟給OS來處理cpu time的分配了
也就是說thread(?)(其實async中沒在用thread的XD)的分配這部分
針對I/O-bound的處理上可以自動妥善分配CPU使用
(務實上大多網頁/應用程式也是I/O為主)
但遇到CPU-bound的部分
因為它仍然是single-thread
所以你必須要讓reactor知道何時可以中斷,讓其他task進來
(太麻煩,所以通常會用thread解決,不過JS沒thread只能fork process)
: http://ppt.cc/5I5f
: 圖為簡易Node.js architecture
作者: jenesis (ゼネシス)   2014-04-27 14:43:00
作者: yragggc (逼繩)   2014-05-15 01:20:00
推推

Links booklink

Contact Us: admin [ a t ] ucptt.com