Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Конкурентное программирование / Потоки

Запуск потока

Thread.start принимает блок, выполняет его в новом потоке и возвращает объект Thread, представляющий выполняющуюся работу:

my $t = Thread.start({ say 'hello from the thread' });

Блок выполняется одновременно с кодом, идущим следом. Основная программа не ждёт его автоматически: она сразу продолжается, а поток делает своё дело в фоне.

Небольшая, но важная деталь: аргументом должен быть блок кода. Пустая пара фигурных скобок { } — это пустой хеш, а не пустой блок, поэтому у потока всегда должно быть тело, которое действительно что-то делает:

my $t = Thread.start({ 2 + 2 }); # нормально: блок с телом

Поскольку основная программа и поток теперь идут одновременно, полагаться на порядок, в котором появится их вывод, нельзя — если только вы явно не дождётесь завершения потока, чему и посвящена следующая тема.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Потоки   |   Тест — Потоки


💪 Или перейдите сразу к упражнениям этого раздела.