A entidade Epoll, um modelo de informação no kernel que pode ser visto no espaço do usuário como um invólucro para dois conjuntos, serve como a idéia fundamental da API Epoll. Dentro deste guia, discutiremos o uso da função Epoll no idioma C.
As funções do sistema a seguir estão disponíveis para construir e administrar um objeto Epoll:
Acionado por nível e acionado por bordas
Os comportamentos acionados por arestas (ET) e acionados por nível (LT) são possíveis para a interface de circulação de incidentes da Epoll (LT). As diferenças dos dois métodos podem ser resumidas da seguinte forma. Suponha que os seguintes transmitam:
A solicitação para epoll_wait (2) feita na etapa 5 provavelmente parará se o identificador de documentos da RFD foi atribuído ao protocolo Epoll com o sinal Epollet (Edge Triggered). Enquanto isso, o parceiro remoto pode estar antecipando uma reação, dependendo do conteúdo que já fornecia. Isso ocorre porque a opção acionada por arestas envia apenas sinais sempre que o descritor de documentos observado sofre modificações.
Portanto, a função do chamador pode até ter que ser suspensa para uma determinada informação que já está no cache do buffer na Fase 5. No exemplo acima mencionado, a gravação em 2 pode desencadear uma atividade a ser criada no RFD, e o incidente será recebido em 3. A chamada para epoll_wait (2) na etapa 5 pode ficar presa porque a atividade de leitura na etapa 4 não usou todas as informações do buffer.
Para impedir que uma leitura ou escrita paralisie a esgotar um trabalho que está gerenciando os vários descritores de arquivos, um programa que usa a opção Epollet deve estar usando os descritores de documentos não bloqueadores. A seguir, é apresentado um procedimento recomendado para usar o epoll como uma interface acionada por arestas (epollet):
Epoll, por outro lado, é apenas uma versão mais rápida da pesquisa (2) e pode ser usada em todos os lugares (2) é usada, pois possui a lógica idêntica sempre que é vista como um protocolo desencadeado por nível (o padrão sempre que o epollet for não dado). A função do chamador tem a opção de fornecer o sinal de epolloneshot para instruir o epoll a fechar o descritor de arquivo vinculado ao receber uma ocorrência com epoll_wait. Enquanto isso, mesmo com o Epoll acionado por arestas, muitas ações podem ser criadas após a recepção dos vários conjuntos de informações (2). O chamador realmente deve reimplementar o descritor do documento com o epoll_ctl (2) e epoll_ctl_mod sempre que a bandeira epolloneshot é dada.
Exemplo:
Embora a lógica do epoll, quando usada como uma API limite, seja idêntica à da pesquisa (2), o comportamento acionado por arestas usa exige uma maior explicação para impedir os atrasos na fila do evento do programa. O ouvinte nesta ilustração é um soquete que não bloqueia sobre o qual a função escuta (2) é invocada. Antes de EAGAIN ser dada pela função Read (2) ou Write (), o método use a função fd () para manter o novo descritor de arquivo pronto (2). Um aplicativo de máquinas de estado orientado a eventos também pode salvar seu estado atual depois de receber o EAGAIN, para que possa retomar a leitura ou a escrita no ponto anterior, quando o FD () é chamado novamente. Confira o código afixado aqui:
Para melhorar a eficiência, o descritor de arquivo só pode ser adicionado uma vez na interface Epoll (Epoll CTL Add) designando (epollin | epollout) como uma interface acionada por arestas. Ao executar o Epoll CTL (2) com o Epoll CTL Mod, você pode evitar a mudança constante entre Epolin e Epollout. O código restante para esta ilustração é anexado na imagem a seguir:
Conclusão:
Trata -se do uso da função Epoll 7 C no Ubuntu 20.04 Sistema operacional Linux para executar a programação do soquete. Discutimos como uma função epoll () 7 C pode ser usada para verificar a viabilidade dos vários descritores de arquivo para determinar se a entrada e a saída que eles contêm são viáveis ou não, tanto do servidor quanto do lado do cliente.