wangjia184 / HashedWheelTimer

HashedWheelTimer implemented in C# and .Net Standard inspired by io.netty.util.HashedWheelTimer
MIT License
113 stars 16 forks source link

关于HashedWheelTimeout类的Expire方法 #7

Closed 0611163 closed 8 months ago

0611163 commented 8 months ago
public void Expire()
{
    if (!CompareAndSetState(ST_INIT, ST_EXPIRED))
    {
        return;
    }

    Task.Run(() => {
        _task.Run(this);
    });
}

为什么这里_task.Run(this);要使用Task.Run包裹?这样如果有大量的HashedWheelTimer类的Delay方法调用,CPU占用会比较高。我的测试CPU占用高达30%,如果去掉Task.Run包裹,CPU占用会降低到5%左右。但我不知道去掉Task.Run包裹会有什么问题?

0611163 commented 8 months ago

明白了,如果不包裹Task.Run,使用它的程序也没有调用Task.Run,那么线程池中线程的数量不会增长,导致执行大量任务时效率低下。