Nir*_*lya 3 scala future callback
在重新阅读scala.lan.org的页面,详细说明未来在这里,我无意中发现了以下句子:
如果某些回调从未完成(例如回调包含无限循环),则可能根本不执行其他回调.在这些情况下,潜在的阻塞回调必须使用阻塞构造(见下文).
为什么其他回调根本不会被执行?我可以为给定的Future安装一些回调.完成Future的线程可能会也可能不会执行回调.但是,因为一个回调不是在玩脚趾,其余的不应该受到惩罚,我想.
我能想到的一种可能性是ExecutionContext的配置方式.如果它配置了一个线程,那么这可能会发生,但这是一个特定的行为和一般不期望的行为.
我错过了一些明显的东西吗?
在ExecutionContext具有最终有限数量的线程的情况下调用回调- 如果不是由特定的上下文实现,则由底层操作系统和/或硬件本身调用.
假设您的系统限制是OS_LIMIT线程.您创建OS_LIMIT + 1回调.从那些OS_LIMIT回调中,回调会立即得到一个线程 - 并且都不会终止.
你怎么能保证剩下的1个回调曾经得到一个线程?
当然,Scala库中可能会内置一些检测机制,但在一般情况下,不可能实现最佳实现:也许您希望回调运行一个月.
相反,(这似乎是Scala库的方法),可以用于处理情况提供便利你,开发商,知道是有风险的.这消除了系统中的惊喜元素.
也许最重要的是- 它使开发人员能够"烤在"关于处理/任务特性所需的信息直接进入他/她的节目,而不是依赖于一些不起眼的一块语言功能(可从版本改为版).