3
回答
定时器影响服务器性能大吗
华为云实践训练营,热门技术免费实践!>>>   
缓存是定时刷新的,定时定了是不是意味着每一秒cpu都要额外执行然后产生额外开销啊,比如不停的跟系统时间比较大小,这影响性能大吗?
<无标签>
举报
醒醒盹
发帖于3年前 3回/746阅
共有3个答案 最后回答: 3年前

你如果就一个定时器,肯定没啥关系,我不懂硬件层的东西,通常我们写的定时任务都不会有啥影响,现在的机器处理这些问题完全没问题。 把你的精力放在其他地方去吧! 通常来说,定时任务导致性能下降明显,不是因为“定时”而是因为“任务”本身就不对引起的。死锁什么的我就不说了,那个说烂了。

1、比如,一张很大的表,你频繁的去扫描他,db的io开销很大,占用连结数,导致其他模块对这张表的操作性能下降。解决方法,分表,想办法任务表扫描的表和其他的表分开。扫描a表进行判断,需要做操作了,批量一次性到b表(业务主表)执行,尽可能减少对b表的操作。

2、同时,分表要尽可能使得任务表容易被扫描(比如扫描完了,清表或者打上记号,保证索引正确工作)

3、定时任务需要一定的内存开销。把定时任务放到另外的机器上,保证主业务机器的应用服务器有足够的内存。这样,可以解决定时任务带来的内存不足导致的频繁回收工作(频繁的内存清理工作是性能杀手?我猜的,我认为是这样)

4、定时,合理的定时,1分钟扫描一次的性能绝对要强于1秒钟扫描一次。结合实际业务需求,判断扫描的间隔时间是否合理。增大扫描间隔当然也可以增强性能。


暂时只想到这些

如果有定时类的任务,建议独立容器或者是模块运行。

以免数据量大的时候交叉影响正常的业务。

--- 共有 3 条评论 ---
黑狗答非所问了兄弟 3年前 回复
tinshen回复 @醒醒盹 : 就是把你的定时任务放在独立环境运行。或者是模块直接剥离出来放在单独的地方运行。 3年前 回复
醒醒盹不知如何用独立模块执行?请举个例子吧 3年前 回复

定时器编写好计划任务是直接写入硬件计数器,当时间到了后,计数器抛出一个

硬件中断,确定开始执行内容,在由软件去执行。不存在损耗过量资源,但请不要直接以循环的方式编写,那个真心调不了硬件中断。线程sleep同理

顶部