> Что характерно, у меня результаты слегка странные (особенно для poll 512
> desc.), может правда дело в Солярке (или что скорее - в PentiumPro c кешом
> 1Мб):
> select (empty) 4.114 usec 0.243 Mhz
> select (16 desc.) 4.313 usec 0.232 Mhz
> select (512 desc.) 5.700 usec 0.175 Mhz
> poll (empty) 3.316 usec 0.302 Mhz
> poll (16 desc.) 8.177 usec 0.122 Mhz
> poll (512 desc.) 3.684 usec 0.271 Mhz
В солярисе select(3) реализован поверх poll(2). Вообще, весь интерфейс
BSD-sockets там в отдельной библиотеке. Напротив, в ранних линуксах
(2.0) poll реализуется поверх select -- man 2 poll. Так что в таких
системах сравнивать что-либо бессмысленно, просто -- как аксиома -- в
солярисе лучше использовать poll а в старых линуксах select.
В этом смысле автор mathopd'а -- определённо адепт соляриса. :)
Далее, насчёт увеличения производительности при большом числе
дескритпторов. Не забывайте о том, что poll может вернуть и (-1) -- по
самым разным причинам. И при большом числе дескрипторов такие причины
становятся всё более вероятными. Например, poll может проверять,
существуют ли передаваемые ему дескрипторы, и при неверном дескрипторе
возвращать (-1) прямо в процессе копирования. При этом, есть некоторая
вероятность того, что начальный участок неинициализированного массива
pollfds заполнен нулями (т.е. stdin). Так что неплохо бы в тесте
проверять возвращаемое значение:
BEGIN_TEST
if (poll(...) == -1) {
printf("...");
break;
}
END_TEST;
Или что-нибудь в этом духе. Тут нужно ещё бы порыться где-нибудь в glibc
и посмотреть, что там на самом деле делает poll. Но мне как-то влом, я
себе уже всё доказал... :)
Хотя, насколько реально существует практическая потребность в httpd для
раздачи статического контента? Если потребность реально есть и если
кто-нибудь готов мне в этом посодействовать -- я может быть и занялся бы
этим более серьёзно.
__
AT
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =