Tencent / flare

Flare是广泛投产于腾讯广告后台的现代化C++开发框架,包含了基础库、RPC、各种客户端等。主要特点为易用性强、长尾延迟低。
Other
1.33k stars 200 forks source link

Timer #93

Open 4kangjc opened 1 year ago

4kangjc commented 1 year ago

https://github.com/Tencent/flare/blob/17b70d10f53b61e6af510c31a12bd889ad5ed03d/flare/fiber/timer.cc#L53-L83 没有看懂UserCallback的作用, Run函数完全没有调用啊, running也就显得乏力了

0x804d8000 commented 1 year ago

确实写错了,感谢反馈,我处理下。

本意是避免多个fiber同时调用用户的callback,不然容易导致线程安全问题。因为一般除非极端情况下timer运行的特别慢,不然不会导致多个timer同时跑,所以对用户来说大多数情况下在timer里面加锁也没太大意义。

UserCallback的另外一个目的是为了在下面套上shared_ptr,提供CopyConstructible,不然没法多次StartFiberDetached。(不过单纯就这一点来说其实shared_ptr<function>也是一样的)

4kangjc commented 1 year ago

确实写错了,感谢反馈,我处理下。

本意是避免多个fiber同时调用用户的callback,不然容易导致线程安全问题。因为一般除非极端情况下timer运行的特别慢,不然不会导致多个timer同时跑,所以对用户来说大多数情况下在timer里面加锁也没太大意义。

UserCallback的另外一个目的是为了在下面套上shared_ptr,提供CopyConstructible,不然没法多次StartFiberDetached。(不过单纯就这一点来说其实shared_ptr<function>也是一样的)

是不是要把if换成while, 多个fiber同时调用用户的callback, 就只执行其中的一个吗?

0x804d8000 commented 1 year ago

本来的想法是采取一个跟Windows类似的做法,避免因为timer处理不过来导致一直在跑个不停

不过现在想想这个做法可能确实容易给用户一些非预期的结果,而且很难定位到问题出在这里,可能确实while (remining--)更合适些

4kangjc commented 1 year ago

timer可以把文档补全一下,或者我来也行,我想想怎么写

4kangjc commented 1 year ago

timer可以把文档补全一下,或者我来也行,我想想怎么写

有时间再写, 不定时:)

4kangjc commented 1 year ago

README中的[调度组](flare/), 这里文档没有链接上