2012-09-29 59 views
9

在我讀過node.js的所有文獻之後,我仍然回到這個問題,node.js本身是否利用隱藏的多線程?我認爲答案是肯定的,因爲如果我們使用簡單的異步文件讀取示例,必須要做的事情是讀取文件,但是如果節點的主要事件循環沒有處理這個工作,那必然意味着應該有一個POSIX線程運行在需要處理文件讀取的地方,然後在完成時將回調放回到要執行的事件循環中。所以當我們說Node.js在一個線程中運行時,我們是否確實意味着node.js的事件循環只有一個線程?或者我在這裏丟失了一些東西.....Node.js實際上在下面使用多個線程嗎?

+0

就我所知,I/O完成端口和其他平臺上的適當概念不依賴於線程,而是內置於OS中的更輕量級的東西。但我無法確定,如果我正確理解這一點...... –

回答

6

去node.js上的Javascript程序,只有一個線程

如果您正在尋找技術,node.js可以自由使用線程來解決異步I/O(如果底層操作系統需要它)。

重要的是永遠不要打破JavaScript程序的「只有一個線程」抽象。如果有更多的線程,他們所能做的就是在Javascript程序中爲主線程排隊工作,他們永遠不會自己執行任何Javascript代碼。

+0

你知道關於「如果底層操作系統需要它」的更多細節嗎? –

+2

@GoloRoden大多數操作系統都有異步I/O調用,不需要您創建任何線程來使用它們,它們本身使用回調機制/完成端口。也就是說,我記得Solaris曾經創建了自己的線程,並且在異步調用中「隱藏」了I/O。這個觀點也存在,調用代碼有*不知道*是否有線程。 –

+0

好的,這意味着:如果操作系統提供無線程異步I/O Node.js只需要一個線程 - 如果不需要,可能會有更多的線程需要。對? –

相關問題