我需要同时执行数千项任务。所以我正在考虑将Futures用于此目的。但是这几千个任务中的每一个都已经在未来。未来的未来使用是否好。或者我在这里做错了什么。 每项任务大约需要1毫秒的时间来计算。因此,不是按顺序执行它们,我认为最好在期货中执行。所以从理论上讲,它应该花费大约1毫秒或者在某个地方完成整个任务。但完全执行需要150毫秒。所以这意味着所有并行任务所花费的都比单独执行的更多。
val start = System.nanoTime()
答案 0 :(得分:0)
您可以使用期货上的flatMap()
函数来组合它们,我猜这就是您所谓的“期货内部期货”,这是使用期货的一种很好的惯用方法。
用这个未来的结果映射表达“触发这个”。例如,您可以执行类似getASpecificEndpointInDb().flatMap(endpointURL => doAGetRequest(endpointURL))
的操作,其中getASpecificEndpointInDb()返回Future [String],doAGetRequest()返回Future [JsObject]
要回答问题的第二部分:即使您有1000个并行任务,您的计算机也只能在任何给定时间物理处理少量任务。根据您的机器,如果是,请说8,理论上最好的是1000/8 = 125 ms。但由于存在一些上下文切换成本,150ms是完全合理的。如果按顺序执行,仍然比1000毫秒好很多:)