Я думал, что epoll
должен быть быстрее, чем poll
, но когда я делаю следующий эксперимент, он оказывается медленнее.Почему `poll.poll` быстрее, чем` epoll.poll`?
Сначала я установил 1 серверный сокет с 10 подключенными к нему сокетами.
import socket
server = socket.socket()
server.bind(('127.0.0.1', 7777))
server.listen(1)
clients = [socket.socket() for i in range(10)]
for c in clients:
c.connect(('127.0.0.1', 7777))
Тогда я зарегистрировал всех клиентов как с poll
и epoll
:
import select
ep = select.epoll()
p = select.poll()
for c in clients:
p.register(c)
ep.register(c)
Наконец я использую %timeit
в IPython
сравнить время выполнения:
%timeit p.poll()
1000000 loops, best of 3: 1.26 us per loop
%timeit ep.poll()
1000000 loops, best of 3: 1.7 us per loop
Может быть, количество сокетов еще слишком мал для epoll
, чтобы побить poll
, но мне интересно что находится в epoll
, что делает его медленнее, когда не так много наблюдаемых сокетов.
Так что 'epoll' должен быть быстрее, не так ли? Как получилось, что в эксперименте это было медленнее? – satoru
Нет опроса быстрее из моего опыта работы с ним – Jordanian
Тогда реализация «epoll» O (1) должна иметь большую константу 'C'. – satoru