簡體   English   中英

PURE Javascript 是同步的還是異步的?

[英]Is PURE Javascript synchronous or asynchronous?

據我了解,javascript 將在瀏覽器中運行或作為 Node.js 的后端。

The browser or Node.js, depending on where you run your javascript, will via web API's or c++ API's handle functions that block the runtime (ie network calls, image rendering, etc), then send them to the event loop and eventually merge them into the javascript 運行的單線程。

我不明白的是,當我谷歌“javascript 是同步的還是異步的”時,答案是 javascript 是異步的。

但這是真的嗎? Javascript is asynchronous because of the web API's or c++ API's in the browser or Node.js backend, that makes threads under the hood, but javascript itself isn't asynchronous then?

如果 javascript 只有一個線程,那一定是同步語言?

Javascript(在瀏覽器和 node.js 中實現)是一個事件驅動系統。

這意味着它在與非阻塞、異步 I/O 一起使用時效果最佳,為您提供與事件驅動系統協調的最佳體驗和功能。 這不一定是 Javascript 語言本身固有的(您可以制作一個只有阻塞 I/O 的 Javascript 版本),但是 Javascript 的所有流行實現都依賴於異步事件隊列並依賴於異步事件隊列與事件隊列協調以提供有用的編程環境。

直到最近,Javascript 還沒有有用的線程和有用的線程同步工具來使具有阻塞 I/O 的多線程系統實用或有用。 現在瀏覽器和 node.js 中都有線程,盡管 node.js 中的線程非常笨拙(V8 解釋器的全新實例,單獨的堆等......),因此它們不一定與系統具有競爭力將線程內置為更多的固有功能。 此外,Javascript 中的線程同步工具還處於開發的早期階段。

我不明白的是,當我谷歌“javascript 是同步的還是異步的”時,答案是 javascript 是異步的。

Javascript 當前流行的實現是在需要異步 I/O 以提高生產力的環境中。 純語言本身不一定需要它,盡管我不知道任何假設線程和阻塞 I/O 的實現。

Javascript is asynchronous because of the web API's or c++ API in the browser are Node.js backend that makes threads under the hood, but javascript itself isn't asynchronous then?

Javascript 環境具有異步功能,因為 Javascript 與事件驅動環境配對,並與定時器和 I/O 等異步操作配對。 因此,Javascript 實現和環境添加到其中的其他內容的組合使環境能夠編寫可以使用異步功能的代碼。 請不要過於關注 Javascript 本身是否異步的語義爭論。 據我所知,指定 Javascript 語言的 ECMAScript 規范不一定要求這樣做。 我認為可能存在沒有異步功能的純 Javascript 語言的實現。 But, most of what you read on the web or in books will refer to "Javascript" when what they really mean are the popular implementations of Javascript such as in a web browser or in node.js. 而且,坦率地說,這主要是相關的,因為除非您要構建自己的自定義環境,否則您可以實際使用 Javascript。

如果 javascript 只有一個線程,那一定是同步語言?

你這個問題的意思並不完全清楚。 默認情況下(不調用 webWorkers 或 Worker 線程)Javascript 在一個線程中運行您的 Javascript 代碼,但它可以訪問非阻塞 I/O 函數,允許操作與您的 Z9E13B69D1D2DA937Z102.AC 並行運行。 在瀏覽器中,您可以對您的服務器進行 Ajax 調用,然后 go 執行其他操作,同時 Ajax 調用完成(進行一些計算,更新屏幕,更新屏幕上的時鍾)通知從 Ajax 調用到達,您可以處理結果。 雖然您的 Javascript 的實際行是一個接一個地同步運行,但您可以啟動異步操作,從而與您的 Javascript 執行並行運行一些事情。 我將避免爭論是否要將其稱為“同步語言”。 這只是一個語義論點。 它以它的工作方式工作,在單線程中運行 Javascript,但利用本機操作系統功能與 Javascript 並行運行其他東西(如網絡操作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM