libhv icon indicating copy to clipboard operation
libhv copied to clipboard

httpclient在多线程设置定时器任务时存在不准的情况

Open caijillx opened this issue 1 year ago • 1 comments

作者你好,我使用了大约8-10个httpclient进行并发异步请求,会发现在一些情况下,执行回掉函数的时间会比我设计的timeout参数要少。 在进行log调试后,发现原因出现在AsyncHttpClient中task->start_time = hloop_now_hrtime(loop); 这句话是为了后续计算elapsed用来设置定时起任务: int elapsed_ms = (now_hrtime - task->start_time) / 1000; 但是hloop_now_hrtime只是单纯的获取loop->cur_hrtime,并没有更新。这导致取到了很久之前残留的cur_time,从而使得elapsed被高估,进而导致设置定时器时实际时长低于预先设置好的timeout参数。

目前我在hloop_now_hrtime函数里调用了hloop_update_time方法,但不知道是否有其他副作用。 uint64_t hloop_now_hrtime(hloop_t* loop) { hloop_update_time(loop); return loop->cur_hrtime; }

caijillx avatar Aug 21 '24 02:08 caijillx