阅读scala.concurrent.Future和scala.concurrent.impl.Future的scala源代码,似乎每个未来的组合都会map为执行程序调度一个新任务.我假设这通常会触发当前线程的上下文切换,和/或作业线程的分配.
考虑到函数流需要在它们之间传递Futures以在没有阻塞的情况下对Futures的结果起作用(或者没有深入研究回调意大利面),当代码以模块化方式编写时,这种"反应性"范式在实践中是不是非常昂贵每个函数只做一些小的东西并传递给其他函数?
这取决于执行上下文。所以你可以选择策略。
您的执行器也可以在调用线程中执行此操作,将映射调用保持在同一线程上。您可以通过显式传递执行上下文或使用隐式传递自己的策略。
我首先会通过记录使用的线程来测试默认的 fork/join 池的作用。据我所知,它的新版本有时会使用提交线程。但是,我不知道这是否用于/应用于 scala 未来的回调。