我讀到JavaScript語言具有幫助實現非阻塞IO的特性,這有助於成功執行諸如node.js之類的項目。我的問題是這些特性是什麼,以及爲什麼非阻塞IO更難以在其他語言中實現?非阻塞IO如何在javascript中工作
回答
有時將javascript標記爲非阻塞IO的原因是由於匿名定義(基於事件)功能的概念。 Node.js專門將這個標籤標記爲他們爲什麼說javascript是一種很好的服務器端語言。然而,這只是一個事實,因爲它在技術上不是非阻塞的,但它將繼續執行代碼,同時等待來自匿名回調/ ajax函數的回調。我不確定這是否是您閱讀的內容,但在一個Node教程中提供的解釋是:
「另一種方法,由Node和一些非常快速的現代服務器(如Nginx和Thin)採用的方法是在事件循環中使用單個非阻塞線程,這是使用JavaScript的決定真正出現的地方,因爲JavaScript被設計用於基於單線程事件循環的環境:瀏覽器JavaScript能夠傳遞閉包基於事件的編程很簡單,你基本上只是調用一個函數來執行某種類型的I/O並將其傳遞給一個回調函數,JavaScript會自動創建一個閉包,確保即使在調用函數已經很長時間之後仍然保持正確的狀態超出了範圍。「
來源:http://net.tutsplus.com/tutorials/javascript-ajax/this-time-youll-learn-node-js/
關於你的多線程標籤的Node.js和Javascript是不多線程的,他們使用封閉的系統,以保持狀態,同時等待回調。因此,他們是非完全非阻塞。有很多情況下會發生阻塞,但對於大多數小型實現,開發人員永遠不會遇到阻塞情況。
在這裏看到爲什麼node.js的是壞的可能的信息:http://teddziuba.com/2011/10/node-js-is-cancer.html(鏈接斷開)
,並在這裏爲rebuttle:http://rhyolight.posterous.com/nodejs-is-not-cancer(鏈接斷開)
癌症鏈接和非癌症鏈接都死了我 – 2015-06-21 20:23:41
對不起。我會嘗試搜索文章標題,看看它們是否存檔在某個地方。這些鏈接都是私人博客,所以我認爲可以安全地假設他們會在3年後遷移。 – Jlange 2015-06-22 17:08:37
另外,Node.js是多線程的 - 所有I/O調用都發生在與主事件循環線程不同的線程上 – 2015-06-22 18:25:13
JavaScript本身不提供非阻塞IO。底層系統調用node.js使用的非阻塞IO。 JavaScript的一流功能意味着在IO完成時很容易傳回回調。
其他語言可以做非阻塞IO就好了。 node.js只是認爲回調使得它非常容易推理和處理非阻塞操作。
Ruby有EventMachine,它可以傳遞塊而不是函數。 C可以使用函數指針來實現非阻塞IO,但是你不會得到閉包,所以它更加痛苦。
- 1. 如何將Scala中的阻塞IO封裝爲非阻塞
- 2. 異步非阻塞IO客戶端如何工作?
- 3. Undertow如何做非阻塞IO?
- 4. 非阻塞IO如何實現?
- 5. .net非阻塞IO pre 4.5
- 6. IOCP和非阻塞IO
- 7. 非阻塞IO和HystrixObservableCommand
- 8. Javascript非阻塞
- 9. 非阻塞API如何工作?
- 10. Python中的阻塞與非阻塞網絡IO
- 11. 瞭解節點中的非阻塞IO
- 12. 非阻塞IO Java中與邏輯
- 13. 如何在Boost Spirit中使用非阻塞或異步IO?
- 14. 使Javascript非阻塞
- 15. 阻止IO與非阻塞IO;尋找好的文章
- 16. 什麼是簡單的話阻止IO和非阻塞IO?
- 17. 非阻塞IO哈斯克爾
- 18. 使用Ruby的非阻塞IO?
- 19. Winsock的非阻塞IO重疊仍塊
- 20. 非阻塞套接字和io
- 21. 的Java非阻塞IO CPU泄漏
- 22. 適用於Android的非阻塞IO
- 23. 如何編寫非阻塞javascript方法?
- 24. 如何檢查I/O操作是阻塞還是非阻塞?
- 25. 如果nodejs使用非阻塞IO,fs.readFileSync如何實現?
- 26. 如何在Linux中顯示進程狀態(阻塞,非阻塞)
- 27. mpi:阻塞與非阻塞
- 28. 在閃存中是否存在非阻塞io?
- 29. 如何使用非阻塞IO寫入文件?
- 30. Filewatcher是否在Java中考慮了非阻塞IO?
是怎樣寫的?就我所知,異步I/O是一個特定於節點的擴展(儘管它確實使用純JS接口)。 – delnan 2012-04-09 16:35:34
該語言不提供非阻塞IO。但是,某些框架可以。 – Cameron 2012-04-09 16:36:13
你能提供你閱讀的文件嗎?也許它們意味着語言語法和語義提供了非阻塞IO。 – 2012-04-09 16:37:08