Por que a enquete não é substituída por epoll?

7

epoll é muito semelhante para poll . Por que não é poll apenas um wrapper para epoll em sistemas que suportam o último?

EDIT: Quero dizer, existem barreiras técnicas contra tal decisão? A implementação de poll as epoll aumentaria drasticamente o desempenho de muitos aplicativos de rede. Deve haver algum problema técnico que eu não percebo.

    
por Nicht Verstehen 03.01.2010 / 20:13

3 respostas

1

Ok, 7 anos depois eu tenho uma resposta mais convincente com base em este artigo de Evan Klitzke.

Primeiramente, a razão pela qual fiz a pergunta em primeiro lugar é a vantagem de desempenho mencionada com frequência de epoll em comparação com poll / select . A palavra diz que epoll é assintoticamente mais eficiente (O (1)) do que poll (O ( N )).

O que não é tão conhecido é que apenas acionado por borda epoll é realmente O (1), enquanto que nível-acionado epoll tem a mesma assintótica de O ( N ). De fato, o sabor level-triggered precisa passar por cima da lista de fds assistidos toda vez que é chamado para encontrar aqueles que potencialmente ainda têm mais dados pendentes. A variedade Edge-trigger pode confiar em sinais em resposta a novos bytes que aparecem em um fd.

Seria interessante descobrir como exatamente um tópico resumido descobre qual fd o despertou, mas é certamente possível que esse dado seja passado durante o despertar acionado por epoll.

Obviamente, poll / select não pode usar acionado por borda epoll , pois as semânticas são diferentes. Como vimos, a implementação com level-triggered epoll não traria benefícios de desempenho assintótico. E, possivelmente, também afetá-lo negativamente se os fatores constantes ou os termos constantes forem altos (pois parecem basear-se em uma comparação grosseira que fiz e citei em outro comentário).

Para mais informações, leia Bloqueio de E / S, E / S não bloqueantes e Epoll .

    
por 19.01.2017 / 00:02
2

pesquisa é muito mais simples para casos fáceis; provavelmente é tão eficiente para um pequeno número de descritores de arquivos. O chamador não precisa se preocupar em manter os FDs de pesquisa e adicionar / remover FDs, eles podem apenas adicionar todos os que eles querem em cada chamada para pesquisar.

Meu sentimento é que eles são complementares, embora a pesquisa possa ser implementada como um wrapper para epoll, provavelmente não deveria ser.

epoll poderia (quase) ser implementado como um wrapper para pesquisa, mas isso acabaria com seus argumentos de eficiência.

    
por 03.01.2010 / 23:20
1

A semântica de poll() e epoll é diferente. Se poll() informar que um descritor é legível, você faz uma leitura, mas não lê todos os bytes disponíveis e, em seguida, passa esse descritor para poll() novamente, ele será ativado imediatamente. AFAIK o mesmo não é verdade de epoll .

Observe também que os descritores epoll são um recurso limitado. A página de manual fala sobre epoll_create() condições de falha que a AFAIK faz não ocorre com poll() .

Embora não tenha certeza de todos os detalhes da implementação, podemos dizer que não faz sentido tornar poll() um wrapper para epoll . O programador deve estar ciente desses pontos, e o código existente escrito com as suposições que poll() permite que quebraria.

    
por 03.01.2010 / 21:34

Tags