gettimeofday(微秒、x86-64 vsyscall 無陷入開銷、足夠精度)。Muduo Timestamp 用 int64_t 存微秒數,範圍 ±30 萬年。timerfd_* 系列(FD 化、融入 Reactor、納秒精度、無信號麻煩)。拒絕 sleep/alarm (信號)、nanosleep (阻塞線程)、timer_create (信號限制)。TimerId runAt(Timestamp, TimerCallback); // 指定時刻
TimerId runAfter(double delay, TimerCallback); // 延遲秒數
TimerId runEvery(double interval, TimerCallback); // 週期觸發
void cancel(TimerId); // 待實現
回調在 IO 線程執行,與網絡回調同線程,無鎖。
boost::bind(&Printer::print, this))。Mutex vs 縮小臨界區)。代碼見 examples/asio/tutorial/timer2~6。
使用 runEvery(3.0, ...) 定期打印吞吐量,AtomicInt64 記錄字節/消息數,支援 setThreadNum() 多線程。完整代碼見 examples/netty/。
非阻塞服務端編程中,絕對不能用 sleep 等阻塞方式等待,否則主事件循環掛起,無法處理 IO。定時任務應轉為特定消息,到時觸發回調。