Данный способ реализован в версиях Perl, начиная с 5.005, и только на тех платформах, которые поддерживают потоки. Потоки поддерживаются в версиях Perl для Windows, как и во многих (но не во всех) версиях Perl для UNIX. Дистрибутив MacPerl в настоящее время не поддерживает многопоточную обработку. Многопоточная обработка подробнее будет рассматриваться позднее.
Мультиплексный сервер.
Наиболее сложный способ предусматривает использование функции select () для переключения между сеансами связи. В его основе лежит тот факт, что быстродействие сети гораздо ниже быстродействия процессора; сетевой сервер основную часть времени проводит в ожидании того, когда сокет будет готов для чтения или записи.
В данном случае сервер создает и сопровождает пул дескрипторов файлов; один из этих дескрипторов файлов относится к приемному сокету и по одному дескриптору файла получает каждый подключенный клиент. При каждом проходе по циклу сервер проверяет сокеты с использованием функции select () для определения того, какие из них готовы для чтения и записи. Обнаружив такой сокет, сервер выполняет для этого операцию ввода-вывода, а затем снова переходит к ожиданию поступления новых запросов от функции select ().
Функция select () реализована на всех основных платформах Perl. К сожалению, этот способ является самым сложным, когда речь идет о создании безошибочно работающей серверной программы. Мультиплексирование будет также описало чуть позже.