在javascript中每个函数调用几乎都是一个新线程吗?

sig*_*lup 0 javascript multithreading node.js

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

Chr*_*res 5

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

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

  • 基于选择的轮询,你在一个线程上停留,处理select的结果,然后再次调用select来获得下一个工作的东西
  • 经典Win32编程,您可以将消息发送到事件队列.该程序的核心是"Dequeue message.Dispatch message.重复直到收到退出消息"
  • 几乎所有其他GUI编程环境都建立了:-)

虽然您可以将其视为第一次近似的线程,但实际上并非如此.线程并行运行,事件以串行方式运行.您永远不必担心并发访问数据,但您必须担心会使事件循环挨饿(不经常返回它).