在我讀過node.js的所有文獻之後,我仍然回到這個問題,node.js本身是否利用隱藏的多線程?我認爲答案是肯定的,因爲如果我們使用簡單的異步文件讀取示例,必須要做的事情是讀取文件,但是如果節點的主要事件循環沒有處理這個工作,那必然意味着應該有一個POSIX線程運行在需要處理文件讀取的地方,然後在完成時將回調放回到要執行的事件循環中。所以當我們說Node.js在一個線程中運行時,我們是否確實意味着node.js的事件循環只有一個線程?或者我在這裏丟失了一些東西.....Node.js實際上在下面使用多個線程嗎?
回答
去node.js上的Javascript程序,只有一個線程。
如果您正在尋找技術,node.js可以自由使用線程來解決異步I/O(如果底層操作系統需要它)。
重要的是永遠不要打破JavaScript程序的「只有一個線程」抽象。如果有更多的線程,他們所能做的就是在Javascript程序中爲主線程排隊工作,他們永遠不會自己執行任何Javascript代碼。
你知道關於「如果底層操作系統需要它」的更多細節嗎? –
@GoloRoden大多數操作系統都有異步I/O調用,不需要您創建任何線程來使用它們,它們本身使用回調機制/完成端口。也就是說,我記得Solaris曾經創建了自己的線程,並且在異步調用中「隱藏」了I/O。這個觀點也存在,調用代碼有*不知道*是否有線程。 –
好的,這意味着:如果操作系統提供無線程異步I/O Node.js只需要一個線程 - 如果不需要,可能會有更多的線程需要。對? –
- 1. 這段代碼實際上是多線程的嗎?
- 2. Node實際創建多少個線程?
- 3. 使用CoreData可以在同一個線程上有多個上下文嗎?
- 4. Node.js多線程使用線程-gogo
- 5. node.js數組實際上hashmaps?
- 6. 線程的實際用途
- 7. 多上下文CoreData使用線程
- 8. 多進程Java程序是在運行JVM的實際機器上下文中的單個進程嗎?
- 9. Node.js端口3000已經在使用,但它實際上不是?
- 10. 每個線程有多個上下文
- 11. 多線程使用一個RInside實例
- 12. 實際使用界面
- 13. AVAudioUnitEQ實際上可以在iOS上使用嗎?
- 14. 如何在這種情況下實現多線程?可能嗎?
- 15. `<-`實際上比`=`慢嗎?
- 16. 多個線程渲染到單獨的OpenGL上下文線程安全嗎?
- 17. SASS:使下劃線文件名實際上創建css文件
- 18. 在多個頁面上使用Socket.io的Node.js?
- 19. Java:我應該在這種情況下使用多線程嗎?
- 20. node.js會使用多個內核嗎?
- 21. python socket編程 - 如何使用下面的代碼實現多線程?
- 22. 在多線程同時在NetworkStream上使用WriteAsync線程安全嗎?
- 23. 每個CPU的線程的實際限制是多少?
- 24. jquery.validate dateISO:這實際上可用嗎?
- 25. iOS CIFilters實際上有用嗎?
- 26. 多線程可以在單處理器系統上實現嗎?
- 27. 從多個線程寫入靜態數據實際上是否安全
- 28. 在多核MacOSX上,是以下C++代碼線程安全嗎?
- 29. 以下實現線程安全嗎?
- 30. ABAddressBook可以在同一個串行隊列上由多個線程使用嗎?
就我所知,I/O完成端口和其他平臺上的適當概念不依賴於線程,而是內置於OS中的更輕量級的東西。但我無法確定,如果我正確理解這一點...... –