From Async/Await to Virtual Threads
10 months ago
- #Python
- #VirtualThreads
- #Concurrency
- 作者讨论了Python中线程相较于async/await的优势,指出虽然async/await让更多人接触到并发编程,但也带来了复杂性。
- 线程更简单,但传统线程API存在局限性。Async/await对此有所改进,但同时引入了异步和线程两套系统的复杂度。
- 结构化并发(随async/await引入)能防止任务脱离父任务存在,相比传统线程改善了执行流和上下文管理。
- 健壮的取消机制实现困难,尤其对真实线程而言——如aiofiles等库所示,这会导致潜在死锁和糟糕的开发体验。
- 作者提议通过改进线程API重新思考并发模型,或可采用虚拟线程来解决性能问题。
- 虚拟线程需通过让出调度器来处理阻塞操作,从而在保持结构化并发优势的同时不丧失其特性。
- 示例代码展示虚拟线程如何结合结构化并发来简化并发编程,避免使用future和promise。
- 并发编程的复杂度应由解释器和内部API管理,对大多数程序员隐藏实现细节。
- 作者建议改进线程API(如更高效使用互斥锁和信号量),并限制线程组内的并发度。
- async/await的未来尚存争议,但作者主张探索虚拟线程以消除'着色函数'问题。