我有一个使用libev作为事件循环的TCP服务器;对于新接受的套接字,我设置:
ev_io_init(&conn->io, tcp_conn_on_event_cb, conn->fd, EV_READ | EV_WRITE);
当一个新连接到来时,我的服务器会消耗所有的 CPU 周期,导致 CPU 利用率达到 100%。我的程序一直调用回调函数 tcp_conn_on_event_cb,并将 revents 设置为 EV_WRITE。
static void tcp_conn_on_event_cb(ev_loop_t *loop, ev_io *ev, int revents)
当我进行制作时
strace mybinary
i've this:
epoll_wait(4, {{EPOLLOUT, {u32=7, u64=4294967303}}}, 64, 59743) = 1
epoll_wait(4, {{EPOLLOUT, {u32=7, u64=4294967303}}}, 64, 59743) = 1
epoll_wait(4, {{EPOLLOUT, {u32=7, u64=4294967303}}}, 64, 59743) = 1
epoll_wait(4, {{EPOLLOUT, {u32=7, u64=4294967303}}}, 64, 59743) = 1
epoll_wait(4, {{EPOLLOUT, {u32=7, u64=4294967303}}}, 64, 59743) = 1
epoll_wait(4, {{EPOLLOUT, {u32=7, u64=4294967303}}}, 64, 59743) = 1
epoll_wait(4, {{EPOLLOUT, {u32=7, u64=4294967303}}}, 64, 59743) = 1
....
有没有解决这个问题的方案?