我有一系列必须在某些时间点执行的任务(将来很长一段时间,几天甚至几周)。我的计划是为每个线程创建一个等到它的时间到期的线程。由于任务的数量可能非常高,我担心这些线程组合将消耗大量资源(无所事事/等待)。我的问题是,一个等待的线程是否会消耗资源,如果是,则消耗多少。
(我认为创建一个任务数据库并不断迭代它以查看是否应该执行任务的效率更低)
答案 0 :(得分:0)
这不是特定于scala的问题。
让线程等待很长一段时间的问题是你的应用程序可能会在此期间崩溃,或者你可能会停电或其他什么。
另一方面,将其存储在数据库中听起来像是一个简单的解决方案。当然,如果你一直遍历所有条目,那将是非常耗时的。但是如果你有" due"数据库中的字段,根据您可以排序,这应该是相当有效的。显然,您需要选择一个能够有效支持此类操作的合适数据库,但实际上,这将允许您构建一个更可靠的系统,该系统可以在重新启动应用程序后继续正常工作。
答案 1 :(得分:0)
如果您需要在特定时间点安排作业,我建议您使用http://www.quartz-scheduler.org/之类的作业调度程序。 它非常广泛,您可以轻松创建和安排如下工作:
class BankAccountModel: NSObject {
static let sharedInstance: BankAccountModel = BankAccountModel()
var defaultAcc = "" // Y or N
}
由于它是一个Java库,您当然也可以在Scala中轻松使用它(参见SO here)。
关于使用Akka(@Pavel)的选项。如果您还没有使用Akka并且您只需要调度程序功能,我会选择Quartz。如果您正在使用Akka(或计划使用它)并且您只需要从现在起或在某个时间段内运行X周/天/小时的作业,您可以使用Akka调度程序。如果你需要更复杂的语义,比如特定的日期和时间,我会看一下Quartz。