Blog - JakeArchibald.com

上图中,主线程运行的时候,产生堆(heap)和栈(stack),栈中的代码调用各种外部API,它们在”任务队列”中加入各种事件(click,load,done)。只要栈(stack)中的代码执行完毕,主线程就会去读取”任务队列”,依次执行那些事件所对应的回调函数

Call Stack调用栈

单线程 === 一个调用栈 === 一次只能做一件事

Blocking 阻塞

当一件事很慢的时候,我们当然希望每一件事情都很快,都能在一瞬间做好,但是在程序中有很多事都是不能一下就能做完的,比如网络请求,读取一个很大的文件,监听一个用户的操作行为

如果是 单线程的话,比如在发送请求的时候,V8只能在同一时间做一件事情的话,那么发请求的时候,页面是处于阻塞状态的,用户是不能操作任何东西的,但是V8会记录你的操作行为,等请求完成后统一响应这些行为,这样体验就非常不好,所以要怎么解决这种问题呢?

Asynchronous Callbacks 异步回调

下面这个setTimeout 就是个例子:

Concurrency & the Event Loop 并发 和 事件循环