民意调查/ epoll处理是否处于中断环境中?

时间:2016-12-18 09:44:16

标签: linux interrupt epoll

这对某些人来说可能是微不足道的问题,但不知怎的,我对此并不确定。

在从内核轮询事件时,是否在中断上下文中处理新事件?

如果没有,是否意味着我们可以在处理程序中休眠/等待(使用处理程序中的其他命令)?

int main (void)
{
    struct pollfd fds[2];
    int ret;


    fds[0].fd = FILENO;
    fds[0].events = POLLIN;


    fds[1].fd = FILENO;
    fds[1].events = POLLOUT;

    ret = poll(fds, 2, TIMEOUT * 1000);

    if (ret == -1) {
        perror ("poll");
        return 1;
    }

    if (!ret) {
        return 0;
    }

    if (fds[0].revents & POLLIN)
    {
        /********** HANDLING EVENTS HERE ***************/
        printf ("FILENO is POLLIN\n");
    }

    if (fds[1].revents & POLLOUT)
    {
        /********** HANDLING EVENTS HERE ***************/
        printf ("FILENO is POLLOUT\n");
    }

    return 0;

}

谢谢你, 然

1 个答案:

答案 0 :(得分:2)

不(一般而言)。

当您调用mysql时,处理器上下文切换到内核上下文,并运行其他进程(和内核线程)。在您的至少一个FD准备就绪后,您的流程将在某个时刻切换回上下文。通常(例如考虑一个管道),这不需要中断上下文,但注意一些I / O需要发生中断上下文(不直接连接到poll())。