如果Javascript是一個單線程進程,AJAX是異步的,那麼它是如何發生的? 所以在操作系統級別不是JS引擎爲Ajax做非阻塞I/O調用?Do JS在操作系統級別使用非阻塞I/O來支持AJAX?
3
A
回答
2
是的,瀏覽器引擎正在對Ajax進行非阻塞I/O調用(當您執行非阻塞ajax調用時)。
瀏覽器有多種不同的方式可以實現ajax網絡。我們唯一知道的就是ajax I/O請求不會阻塞JavaScript線程。而且,每個瀏覽器都可以自由地以不同的方式實現它,只要它們不會阻止JS執行線程以及在ajax調用期間保持瀏覽器正常工作所需的任何其他線程。
在瀏覽器內部,它可能使用單獨的OS線程以阻塞的方式在該線程上運行ajax調用,它可以在單獨的線程上使用非阻塞I/O,它可以在JavaScript解釋器線程上使用非阻塞I/O(可能不太可能,但可能)。它甚至可以使用一個獨立的流程來管理與IPC之間的網絡操作以在它們之間進行通信。它選擇的完全取決於瀏覽器實現,因爲這些方法中的任何一個都可以讓javascript解釋器繼續運行,而ajax網絡異步發生。不同的瀏覽器也可能有不同的實現。
Chrome對於其他瀏覽器不支持的瀏覽器窗口使用單獨的進程。
相關問題
- 1. 系統Verilog中的++操作符是阻塞的還是非阻塞的?
- 2. Unity3d是否支持非阻塞網絡IO?
- 3. 阻塞來電android系統
- 4. 使用Ruby的非阻塞IO?
- 5. .net非阻塞IO pre 4.5
- 6. IOCP和非阻塞IO
- 7. 非阻塞IO和HystrixObservableCommand
- 8. Qt - 系統級調用阻塞的QThreads
- 9. Python的線程阻塞IO操作
- 10. 我想讓接受系統調用爲非阻塞。我如何使接受系統調用爲非阻塞?
- 11. 非阻塞版本的系統()
- 12. 適用於Android的非阻塞IO
- 13. 使用TPL與並行阻塞IO操作
- 14. 重構非阻塞nodejs do..while循環
- 15. 黑莓支持Android操作系統
- 16. Node.js支持的操作系統
- 17. DotNetBrowser - 支持的操作系統
- 18. 不支持的操作系統
- 19. OpenCV支持哪些Android操作系統?
- 20. 支持Bluemix的操作系統
- 21. 非阻塞套接字和io
- 22. 阻止IO與非阻塞IO;尋找好的文章
- 23. 什麼是簡單的話阻止IO和非阻塞IO?
- 24. 使用fork的C++程序中的非阻塞系統調用
- 25. 如何檢查I/O操作是阻塞還是非阻塞?
- 26. Winsock的非阻塞IO重疊仍塊
- 27. 如何將Scala中的阻塞IO封裝爲非阻塞
- 28. Python中的阻塞與非阻塞網絡IO
- 29. 非阻塞IO哈斯克爾
- 30. Undertow如何做非阻塞IO?
我確實認爲它可能使用了其中一種機制,但我想知道一個具體的例子,比如firefox(比如說)JS引擎使用的。 – Durin 2012-04-03 17:51:00
@AnirudhTomer - 你真的想解決什麼問題? Firefox源代碼是開源的。人們最終可以找到相關的代碼,看看它是如何工作的,如果你需要知道。我不知道我的頭頂,只是我不明白它使用哪種技術是多麼重要。 – jfriend00 2012-04-03 17:54:52
嗯,我對網絡技術很陌生,我正在考慮AJAX如何工作,所以我只想把這個問題放在這裏。 你!發佈這個問題後,我做的第一件事就是下載FF代碼並檢查出我需要的東西。它有什麼關係:好!除非我知道它在內部是如何工作的,否則渴望依然:)無論如何,感謝回覆 – Durin 2012-04-03 18:07:35