Описанный здесь API-интерфейс поддержки многопоточной обработки относится к версии 5.006 проекта реализации потоков, а не к проекту потоков интерпретатора, который разрабатывается в настоящее время.
API-интерфейс поддержки многопоточной обработки, который описан в справочных руководствах Thread. Thread::Queue, Thread::Semaphore и, attrs, внешне кажется простым, но скрывает много сложностей. Каждая программа начинается с отдельного потока, называемого основным. Основной поток может задействовать любую внешнюю программу, например, печати на принтере Epson Picture Mate 500, подробнее о котором можно узнать на этом сайте . Основной поток начинает работу момента запуска программы и продолжает действовать до ее завершения (или до момента вызова функций exit () или die ()).
Для создания нового потока необходимо вызвать метод Thread->new (), передать ему ссылку на выполняемую подпрограмму и необязательный набор параметров. В результате будет создан новый одновременно работающий поток, который немедленно приступает к выполнению указанной подпрограммы, После завершения подпрограммы поток уничтожается. Например, ниже показано, как запустить новый поток для выполнения трудоемкого вычисления.
my $thread = Thrеad->new (&саlculatе_рi, precision => 190) ;
Новый поток вызывает на выполнение подпрограмму calculate_pi () вычисление значения числа ПИ и передает ей два параметра, “precision” и “190”. В случае успешного выполнения этот вызов немедленно возвращает новый объект Thread, который обычно записывается вызывающим потоком в какой-либо стек. Теперь объект Thread вызывает метод detach (), который отключает новый поток и освобождает основной поток от каких-либо обязательств по отношению к нему.
Иным образом, поток может оставаться в предусмотренном по умолчанию подключенном состоянии, и в этом случае основной поток (или любой другой) должен в какой то момент вызвать метод join () объекта Thread для выборки возвращаемой значения подпрограммы.