替代轮询工作计划程序。
|
我们这里需要工作服务器,而我目前正在使用Quartz.net,但是创建自己的想法吸引了我。至少了解Quartz.net在幕后可能会做什么并不会损害我对更有效地使用它的理解/机会。
所以我的问题是,您将如何在不进行轮询的情况下获取和解雇线程上的工作?如果您每2分钟检查一次\'jobstore \',以查找需要解雇的工作,则可能会延迟2分钟。如果减少轮询时间,则会增加作业库的负担,但仍无法获得真正的开始时间。您可以为接下来的两分钟段预加载作业,并在其余时间使线程进入睡眠状态,以便它们在适当的时间启动,但是如果轮询时间长(删除,重新安排等),这似乎很麻烦并且容易出现问题。我正在研究Quartz以弄清楚它是如何做到的,但是我想知道我是否缺少一些基本知识。
编辑:
像Kevin最初描述的那样的线程结构似乎是您应该做作业服务器的方式。它以最小的开销为您提供最大的灵活性。因为线程是大多数人可以使用的皮塔饼(也许就是我:),所以更简单的轮询示例将在90%的情况下完成工作,但会损失灵活性和更多开销。
另一方面,除非您要使它成为单线程并执行一个作业,否则无论如何都要处理该线程。最好也尽力消除野猪的信号。
我也同意凯文(Kevin)的观点,即您在轮询数据库示例中声称免费获得的东西并不是真正免费的。您将像对线程/等待应用程序一样进行编码。如果您的轮询数据库作业服务器在作业过程中崩溃了怎么办?两者都将依靠一些持久存储来在发生灾难时跟踪其状态。
如果将“ jobstore”上移一个抽象级别而不基于正常的ACID(正确的术语)数据库怎么办?现在,我相信您的许多“免费”东西所基于的东西不再可用(交易?)。
没有找到相关结果
已邀请:
1 个回复
渐首洽陈染