В предыдущих разделах было описано применение функции select () и модуль IO::Select для мультиплексирования нескольких потоков ввода-вывода. Однако системный вызов select () имеет некоторые проектные ограничения, связанные с тем, что в нем для представления контролируемых дескрипторов файлов применяется двоичный вектор. На обычном хосте, таком как настольный компьютер, максимальное число контролируемых файлов обычно невелико, порядка 256, и поэтому двоичные векторы имеют длину не более 32 байт. Однако на хосте, предназначенном для размещения таких сетевых приложений, как мощный Web-сервер, к примеру, macbook-remont.ru представляющий сервисное обслуживание Apple, максимальной число контролируемых файлов может измеряться тысячами. Поэтому двоичные векторы, необходимые для описания каждого возможного дескриптора файла, становятся слишком большими и требуют просмотра в операционной системе большого (и редко заполненного) двоичного вектора при каждом вызове функции select (). Это может послужить причиной снижения производительности.
В стандарте POSIX предусмотрен альтернативный API-интерфейс, основанный на использовании функции poll (). Эта функция имеет такое же назначение, как и функция select ( ), но в ней для представления наборов файлов используются не двоичные векторы, а массивы. Поскольку в массивах размещаются только те дескрипторы файлов, которые в данный момент представляют интерес, выполнение вызова роll() не связано с бесполезными затратами времени на просмотр большой структуры данных для определения того, какие дескрипторы необходимо контролировать.