协程编程:Fibers 和 Stackless Coroutines 的性能、可扩展性和可用性分析

0 下载量 29 浏览量 更新于2024-08-25 收藏 376KB PDF 举报
Fibers Under The Magnifying Glass - 2018 (p1364r0) 计算机科学 本文档讨论了 fibers(有时也称为 stackful coroutines 或用户模式协作调度线程)和 stackless coroutines(编译器合成状态机)的两个不同编程设施。它们在性能和功能方面存在很大差异。本文将从效率、可扩展性和可用性三个方面讨论 fibers 的问题,并得出结论认为 fibers 不是编写可扩展并发软件的合适解决方案。 **Fibers 和 Coroutines** Fibers 和 Coroutines 都是编程语言中实现并发编程的机制。Fibers 是一种基于栈的协作式线程机制,允许开发者手动控制线程的调度和切换。Coroutines 则是一种基于状态机的编程机制,允许开发者编写异步代码。 **Fibers 的问题** Fibers 存在三个主要问题:效率、可扩展性和可用性。首先,Fibers 的内存占用较大,会导致系统性能下降。其次,Fibers 的上下文切换开销较大,会导致系统性能下降。最后,Fibers 的可扩展性和可移植性较差,会导致系统难以维护和扩展。 **Case Study** 本文还提供了多个 Case Study,展示了 Fibers 在不同操作系统和编程语言下的应用和问题。例如,在 Windows 平台上,Fibers 可以用于实现高效的并发编程,但是在 Linux 和 POSIX 平台上,Fibers 的实现存在一定的困难。Facebook 也曾经尝试使用 Fibers 实现高效的并发编程,但最终放弃了该尝试。 **结论** Fibers 不是编写可扩展并发软件的合适解决方案。开发者应该选择其他编程机制,如 stackless coroutines,来实现高效的并发编程。 **Acknowledgements** 本文档感谢 Gor Nishanov 等人对本文档的贡献。 **Bibliography** 本文档参考了多个文献资料,包括 Knuth 的 Coroutines 论文等。 **Appendix A: Stackless vs Stackful Comparison** 附录 A 提供了 stackless coroutines 和 stackful coroutines 的比较,展示了两者的不同之处和优缺点。