我有一些数据库优化例程需要定期执行。我目前正在使用 TTimer,但主 VCL 冻结并且非常 hacky ...我想知道最好的方法是什么,以降低 cpu 消耗并执行这些例程。我认为将例程放在具有低线程优先级的单独线程中是最好的方法。
有任何想法吗 ?
如果可能的话,最好只对所有线程进行编码以完成在特定时间需要完成的最重要的事情。弄乱线程优先级可能会导致严重的性能问题 http://en.wikipedia.org/wiki/Priority_inversion如果你不知道自己在做什么。相反,只需像这样编写线程:
有什么重要的事情要做吗?如果是的话就这样做吧。
有什么不太重要的事情要做吗?如果是这样,那就做一点吧。
转到步骤 1。
假设您确实使用线程优先级。想象一下:
低优先级任务 A 获取数据库的锁。
正常优先级任务 B 需要大量 CPU 时间,它会从低优先级任务中窃取 CPU。
普通优先级任务 C 需要访问数据库。但它无法运行,因为低优先级任务持有数据库的锁,并且任务 B 比任务 A 获得了 CPU 权。
现在,任务 C 必须等到任务 B 完成才能访问数据库。但它应该与任务 B 一起进行时间切片。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)