javascript中的每个函数调用实际上都是一个新线程吗

Is every function call in javascript practically a new thread?

本文关键字:一个 新线程 线程 函数调用 实际上 javascript      更新时间:2023-09-26

我来自C背景,发现javascript的异步性非常酷。然而,我不知道事情是如何异步的。是不是每个函数调用实际上都是一个新线程?

不,它不是一个新线程:它正在运行一个事件循环。

C中以相同方式工作的系统示例:

  • 基于select的轮询,您停留在一个线程上,处理select的结果,然后再次调用select以获得下一个要处理的事情
  • 经典的Win32编程,用于将消息发送到事件队列。该程序的核心是"退出队列消息。调度消息。重复直到收到退出消息"
  • 几乎所有其他已经构建的GUI编程环境:-)

虽然你可以把它看作是一个第一次近似的线程,但事实并非如此。线程并行运行,事件串行运行。您永远不必担心对数据的并发访问,但您必须担心会使事件循环陷入饥饿(不会经常返回)。