假设我已经设置了一组文件描述符,例如8、9、10、11、12,并按照指定的顺序执行epoll_wait()以读取数据。epoll_wait返回socket8,10和11上要读取的数据。epoll数组中返回的文件描述符的顺序是8、10和11还是会被打乱? 最佳答案 Themanpage没有具体说明订单,因此在调用它时依赖于订单可能不是一个好主意。即使它们在一种实现中按顺序返回,它们也可能不会在另一种实现中。最好假设它们可以按任何顺序返回。 关于c-epoll中文件描述符的返回顺序是什么?,
假设我已经设置了一组文件描述符,例如8、9、10、11、12,并按照指定的顺序执行epoll_wait()以读取数据。epoll_wait返回socket8,10和11上要读取的数据。epoll数组中返回的文件描述符的顺序是8、10和11还是会被打乱? 最佳答案 Themanpage没有具体说明订单,因此在调用它时依赖于订单可能不是一个好主意。即使它们在一种实现中按顺序返回,它们也可能不会在另一种实现中。最好假设它们可以按任何顺序返回。 关于c-epoll中文件描述符的返回顺序是什么?,
我有一个使用epoll(7)的多线程linux程序。epoll(7)手册页说当它的一个fd关闭时,这个fd将自动从epoll集中删除。我的问题是,如果epoll集的fd在一个线程中被关闭,而epoll集在另一个线程中同时被轮询而没有同步怎么办。程序会损坏还是内核会自动同步此访问?谢谢冯 最佳答案 epoll集中的fds由内核维护,因此您是安全的-内核会处理任何必要的同步。也就是说,仍然有可能fd上的事件在fd关闭之前进入另一个线程。因此,可能有来自fd的事件不再出现在集合中。对于精心设计的程序,这应该不会造成问题。
我有一个使用epoll(7)的多线程linux程序。epoll(7)手册页说当它的一个fd关闭时,这个fd将自动从epoll集中删除。我的问题是,如果epoll集的fd在一个线程中被关闭,而epoll集在另一个线程中同时被轮询而没有同步怎么办。程序会损坏还是内核会自动同步此访问?谢谢冯 最佳答案 epoll集中的fds由内核维护,因此您是安全的-内核会处理任何必要的同步。也就是说,仍然有可能fd上的事件在fd关闭之前进入另一个线程。因此,可能有来自fd的事件不再出现在集合中。对于精心设计的程序,这应该不会造成问题。
在多个线程之间共享同一个Epollfd(不是socketfd)是否安全?如果是这样,每个线程是否必须将自己的事件数组传递给epoll_wait(2)或者他们可以分享吗?例如void*thread_func(void*thread_args){//extractsocket_fd,epoll_fd,&event,&events_arrayfrom//thread_args//epoll_wait()usingepoll_fdandevents_arrayreceivedfrommain//nowallthreadswouldbeusingsameepoll_fdandeventsarra
在多个线程之间共享同一个Epollfd(不是socketfd)是否安全?如果是这样,每个线程是否必须将自己的事件数组传递给epoll_wait(2)或者他们可以分享吗?例如void*thread_func(void*thread_args){//extractsocket_fd,epoll_fd,&event,&events_arrayfrom//thread_args//epoll_wait()usingepoll_fdandevents_arrayreceivedfrommain//nowallthreadswouldbeusingsameepoll_fdandeventsarra
我想在C/Linux中开发一个多线程UDP服务器。该服务在单个端口x上运行,因此只能将单个UDP套接字绑定(bind)到它。为了在高负载下工作,我有n个线程(静态定义),比如每个CPU1个线程。可以使用epoll_wait将工作传递给线程,因此线程可以根据需要使用'EPOLLET|唤醒。EPOLLONESHOT'。我附上了一个代码示例:staticintepfd;staticsig_atomic_tsigint=0;.../*Threadroutinewithepoll_wait*/staticvoid*process_clients(void*pevents){intrc,i,soc
我想在C/Linux中开发一个多线程UDP服务器。该服务在单个端口x上运行,因此只能将单个UDP套接字绑定(bind)到它。为了在高负载下工作,我有n个线程(静态定义),比如每个CPU1个线程。可以使用epoll_wait将工作传递给线程,因此线程可以根据需要使用'EPOLLET|唤醒。EPOLLONESHOT'。我附上了一个代码示例:staticintepfd;staticsig_atomic_tsigint=0;.../*Threadroutinewithepoll_wait*/staticvoid*process_clients(void*pevents){intrc,i,soc
如何将AIO和epoll结合在一个事件循环中?Google发现2002年和2003年有很多关于统一它们的讨论,但不清楚是否发生了任何事情,或者是否有可能。有没有人使用eventfd作为aio信号自己使用epoll循环? 最佳答案 试试libevent:http://www.monkey.org/~provos/libevent/有补丁支持两者。 关于linux-如何在单个事件循环中同时使用AIO和epoll?,我们在StackOverflow上找到一个类似的问题:
如何将AIO和epoll结合在一个事件循环中?Google发现2002年和2003年有很多关于统一它们的讨论,但不清楚是否发生了任何事情,或者是否有可能。有没有人使用eventfd作为aio信号自己使用epoll循环? 最佳答案 试试libevent:http://www.monkey.org/~provos/libevent/有补丁支持两者。 关于linux-如何在单个事件循环中同时使用AIO和epoll?,我们在StackOverflow上找到一个类似的问题: