2012-02-11 34 views
0

考慮以下例子:(假定快車是可用的)的NodeJS Parallesim瞭解

實施例1:

app.get("/a", function(res){ 
    // Some-Blocking function for 10 seconds 
    res.send("done"); 
}); 

app.get("/b", function(res){ 
    res.send("done"); 
}); 

在這個例子中,如果/一個第一次被請求,則1秒後/ B ;/b在/ a完成之前未處理?如果它是一個線程,它應該是。那麼消除這個問題的方法是什麼?

實施例2:

app.get("/a", function(res){ 
    // Some-Library-Database function 
    db.find({"user.id" : 5}, function(data){ 
     res.send(data); 
    }); 
}); 


app.get("/b", function(res){ 
    res.send("done"); 
}); 

再次/請求了這樣它進入功能,db.find調用,所以當db.find完成時,回調執行res.send(數據) A.因此,我們可以在不等待/請求的情況下回應/對,對吧? (如果我錯了,請糾正我)

那麼,我們又怎樣才能實現例1中的例2呢?我們是否可以使該阻塞函數也可以運行異步?或者是DB在做IO(通過TCP向服務器發送命令等)使該功能異步?我的意思是,在nodejs中,唯一的異步是IO嗎?如果需要大量計算,我們是否必須提出IO請求?

我想學習和建立根據的概念。我已閱讀NodeJS is cancer帖子閱讀有關節點的批評,不知道他是否只是拖釣。

回答

1
  1. 投放在主代碼開頭爲block.js
  2. 呼叫child_process.fork「10秒一些遮擋功能」(「app.js」)的塊
  3. 添加「消息」事件處理程序.js文件,把你的阻塞代碼中有
  4. 呼兒爲b.send(參數),在b.on('message', function(reply) {...}});

閱讀回覆這樣,你在你的阻塞處理器所擁有的一切處理順序,並仍然允許客戶端不使用「」堵代碼父要處理「app.js」

編輯:最新的文檔鏈接

+0

順便說一句,如果你有什麼「堵持續10秒」,它要麼是由於阻塞的IO(最可能是你有非阻塞節點替代)或CPU綁定任務(可能它是值得重寫的東西像C/C + +) – 2012-02-12 01:04:13

+0

該鏈接似乎被打破 – Annan 2012-12-24 23:15:36