3

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
                           ....

この問題の解決策はありますか?

4

1 に答える 1