2012-10-16 91 views
4

比方說,我有這樣的代碼:在NodeJS中:兩個回調是否可以同時執行?

function fn(n) 
{ 
    return function() 
    { 
    for(var k = 0; k <= 1000; ++k) { 
     fs.writeSync(process.stdout.fd, n+"\n"); 
    } 
    } 
} 

setTimeout(fn(1), 100); 
setTimeout(fn(2), 100); 

難道12將被打印到stdout互換(例如12121212121...)?

我已經測試過這個,它們沒有交替使用,即1111111...222222222...,但是很少有測試遠不能證明,我擔心可能會發生類似111111211111...2222222...的事情。

換句話說:當我在Node中註冊一些回調函數和事件處理函數時,兩個回調函數可以同時執行嗎?

(我知道這可能是可能與發射兩個過程,但我們將有兩個stdout和上面的代碼會被分裂成單獨的文件等)

另一個問題:忘記的節點上,一般來說:在單一過程中的任何語言中,兩種功能是否可以在同一時間執行(即以與上述相同的方式)?

回答

5

不,每個回調都將在其自己的「執行框架」中執行。在其他語言中,如果操作發生在不同的線程中,「並行執行」和由此引起的潛在衝突是可能的。

1

只要回調代碼是純粹的同步比沒有兩個函數可以並行執行。 開始使用一些asynchornish的東西,如獲取網絡結果或插入到數據庫,tadam:你會有並行性問題。

相關問題