libev をイベント ループとして使用する tcp サーバーがあります。私が設定した新しい受け入れられたソケットの場合:
ev_io_init(&conn->io, tcp_conn_on_event_cb, conn->fd, EV_READ | EV_WRITE);
新しい接続が来ると、サーバーは CPU サイクル全体を消費します。CPU 使用率は 100% です。私のプログラムは、revents が EV_WRITE として設定されたコールバックtcp_conn_on_event_cbを常に呼び出します。
static void tcp_conn_on_event_cb(ev_loop_t *loop, ev_io *ev, int revents)
私が作るとき
strace mybinary
私はこれを持っています:
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
....
この問題の解決策はありますか?