【发布时间】:2017-06-03 15:48:51
【问题描述】:
如果多个线程 epoll 在同一个套接字上等待怎么办? 在我自己的实验中,它表明只有一个线程可以成功调用 epoll_wait,其他线程显示 Invalid arguments 错误。谁能解释一下?
【问题讨论】:
标签: linux multithreading epoll
如果多个线程 epoll 在同一个套接字上等待怎么办? 在我自己的实验中,它表明只有一个线程可以成功调用 epoll_wait,其他线程显示 Invalid arguments 错误。谁能解释一下?
【问题讨论】:
标签: linux multithreading epoll
您可以为同一个 epoll_fd 在多个线程上同时调用 epoll_wait。
event.events = EPOLLIN | EPOLLET | EPOLLONESHOT;
【讨论】:
您可以在多个线程上为同一个 fd 并发 epoll_wait。但是 epoll 不像 IOCP 那样处理线程同步。当某个套接字上发生事件时,所有线程都可能来自 epoll_wait 调用。通常只有一个线程就足以等待 epoll_wait。然后就可以把接收或发送数据的任务从epoll_wait线程(轮询线程)交给其他线程了。
【讨论】: