背景:最近在做执行器压测,为了方便,我将相同的task复制了1000个,业务逻辑是sleep5s,执行策略是6s/次
问题:任务在执行的时候发生了大量调度错误There are tasks running。后来我只启动两个任务跑,发现第二个任务在跑的时候依然会报错。随后我将第一个任务停掉,发现而且这个报错是无法自愈的,即发现这不是个单纯的超时占用问题。查了源码发现runList和regList在多线程时共用了同一个task指针,导致同一个路由并发的时候会对task并发读写,导致runList的task.Id和task不一致,callback释放了不正确的task。
背景:最近在做执行器压测,为了方便,我将相同的task复制了1000个,业务逻辑是sleep5s,执行策略是6s/次 问题:任务在执行的时候发生了大量调度错误There are tasks running。后来我只启动两个任务跑,发现第二个任务在跑的时候依然会报错。随后我将第一个任务停掉,发现而且这个报错是无法自愈的,即发现这不是个单纯的超时占用问题。查了源码发现runList和regList在多线程时共用了同一个task指针,导致同一个路由并发的时候会对task并发读写,导致runList的task.Id和task不一致,callback释放了不正确的task。