异步编程的四十年博弈:从回调地狱到结构化并发

1958年,一位名叫Melvin Conway的程序员在编写汇编程序时,遇到了一个困扰:他想让程序在执行到某处时"暂停",稍后从暂停点继续执行。这个看似简单的需求,催生了一个被命名为"协程"(coroutine)的概念。 ...

10 min · 4964 words

setTimeout(fn, 0) 为什么总是比 Promise 慢:事件循环的任务调度真相

2014年,Philip Roberts 在 JSConf EU 上做了一场名为"What the heck is the event loop anyway?“的演讲。这个演讲后来在 YouTube 上突破了百万播放量,成为理解 JavaScript 异步机制的入门必修课。然而,演讲中并未触及一个更深层的问题:当 setTimeout(fn, 0) 和 Promise.resolve().then(fn) 同时存在时,谁先执行? ...

10 min · 4773 words

任务队列的优先级博弈:为什么 Promise 总是抢在 setTimeout 前执行

2015年8月,Google开发者倡导者Jake Archibald发布了一篇题为《Tasks, microtasks, queues and schedules》的文章,用一个简单的代码示例揭示了JavaScript开发者普遍存在的认知盲区: ...

10 min · 4931 words