2012-07-28 48 views
3

如果您在Node.js中運行I/O密集型任務,如使用node-fibers使用node-fibers,那麼它會阻塞嗎?節點光纖是否阻塞?

我還沒有使用過節點光纖,但看起來像b/c - 如果用在處理HTTP請求的代碼中,其中運行了一些長的通常非阻塞的I/O代碼 - 現在它會阻止其他請求訪問您的應用。這是真的還是不?關於它爲什麼是真/假的一點細節也會很有幫助。

回答

1

纖維允許程序員編寫「線程」阻塞語句JavaScript代碼。但是它的實現不是阻塞的,代碼相當於node.js異步事件代碼。 Laverdets的實現在某些時候暫停了光纖的執行,就像異步node.js模型一樣,並且可以在稍後恢復。

纖維更多的是語法糖,它們不會改變node.js異步模型。唯一的區別是光纖創建不同的執行堆棧(如果我是正確的),這對於正常的nodejs異步代碼來說是一個很小的開銷。

+0

纖維還保留了回調丟失的堆棧痕跡 – avital 2012-12-12 07:58:36

+2

纖維不是語法糖,它們改變了代碼的語義。 – 2014-06-25 16:59:29

+0

您可以(理論上)使用光纖重寫代碼,以便不使用光纖進行編碼,但不會引入新的概念。所以imho可以被聲明爲語法糖,它只是一種編寫更易讀和更短程序的形式。 – 2014-06-28 11:25:47