io_uring如何让Linux I/O性能翻倍:从环形缓冲区到零拷贝的技术革命

2019年5月,Linux 5.1内核合并了一个名为io_uring的新子系统。三年后,这项技术已经成为高性能数据库、存储引擎和网络服务的标配。从Redis到PostgreSQL,从Nginx到Envoy,越来越多的系统开始迁移到这个新接口。 ...

18 min · 8651 words

数据流太快会撑爆内存?背压机制为何是异步系统的安全阀

2015年,一家电商平台在促销活动中遭遇了一场诡异的生产事故。订单服务正常运行,CPU占用率不到30%,内存却以每秒数百兆的速度增长,最终触发了OOM Killer。运维团队排查了三天,才在日志里发现一条不起眼的错误信息:MissingBackpressureException。 ...

12 min · 5514 words

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

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