JavaScript执行引擎未指定?
我最近开始学习JavaScript。几个月来,我一直在和一起创建应用程序 让我困惑的一个主要方面是,如何能够用JavaScript编写异步代码,而不必担心这样的事情 因此,我发现了两篇有趣的文章(,),它们解释了如何保证我编写的任何代码都将始终由单个线程执行。总之,我所有的异步代码都被简单地安排在一个进程中的某个点上执行。这听起来很像操作系统调度器在一台只有一个处理器的机器上工作,其中每个进程都计划在有限的时间内使用处理器,这给了我们一种虚假的并行感。而回调将是这样的 这些文章没有提供任何特定的参考资料,因此我认为JavaScript执行引擎工作原理的最佳来源当然应该是语言规范,因此我获得了最新版本的 令我大吃一惊的是,我发现这里并没有指定这种执行行为。怎么会?这看起来像是浏览器和节点中所有JavaScript执行引擎的基本设计选择。有趣的是,我还没有找到一个地方可以为任何特定的引擎指定这一点。事实上,我不知道人们是如何发现事情是这样运作的,就像上面提到的那些书和博客中明确肯定的那样 所以,我有一套我认为有趣的问题。我希望任何提供见解、评论或简单参考的答案都能为我指明正确的方向,以理解以下内容:JavaScript执行引擎未指定?,javascript,multithreading,node.js,asynchronous,ecmascript-5,Javascript,Multithreading,Node.js,Asynchronous,Ecmascript 5,我最近开始学习JavaScript。几个月来,我一直在和一起创建应用程序 让我困惑的一个主要方面是,如何能够用JavaScript编写异步代码,而不必担心这样的事情 因此,我发现了两篇有趣的文章(,),它们解释了如何保证我编写的任何代码都将始终由单个线程执行。总之,我所有的异步代码都被简单地安排在一个进程中的某个点上执行。这听起来很像操作系统调度器在一台只有一个处理器的机器上工作,其中每个进程都计划在有限的时间内使用处理器,这给了我们一种虚假的并行感。而回调将是这样的 这些文章没有提供任何特定的
- 既然EcmaScript没有指定JavaScript执行引擎应该与事件循环一起工作,那么JavaScript的实现为什么会以这种方式工作,不仅在浏览器中,而且在Node.js中李>
- 这是否意味着我可以实现一个新的JavaScript引擎,它与EcmaScript兼容,实际上提供了真正的多线程功能,具有同步锁、条件等特性
- 如果我想执行一个CPU密集型任务,使用事件循环的执行模型是否会阻止我利用多核?我的意思是,我当然可以将任务划分成块(如其中一篇文章中所解释的),但这仍然是串行执行的,而不是并行执行的。那么,JavaScript引擎如何利用多核来运行我的代码呢
- 您是否知道有任何其他知名来源正式指定了任何特定JavaScript引擎实现的这种行为
- 如果我们不能假设一些关于执行环境的事情,那么代码如何能够在库和引擎之间进行移植
您做出的某些假设/弱参考导致您得出此结论。其中包括:
print(x); // Global print function prints to the console
version(170); // Tell Rhino we want JS 1.7 language features
load(filename,...); // Load and execute one or more files of JavaScript code
readFile(file); // Read a text file and return its contents as a string
readUrl(url); // Read the textual contents of a URL and return as a string
spawn(f); // Run f() or load and execute file f in a new thread
runCommand(cmd, // Run a system command with zero or more command-line args
[args...]);
quit() // Make Rhino exit