Многопоточное программирование является немаловажным в данный момент. Практически любой современный язык знает такие понятия как потоки, процессы и тому подобное. К тематике многопоточного программирования также относятся так называемые акторы. Дабы не переговаривать некоторые вещи на новый лад, процитирую понятие актора с Википедии:
В компьютерных науках модель акторов представляет собой математическую модель параллельных вычислений, которая трактует понятие «актор» как универсальный примитив параллельного численного расчёта: в ответ на сообщения, которые он получает, актор может принимать локальные решения, создавать новые акторы, посылать свои сообщения, а также устанавливать, как следует реагировать на последующие сообщения.
Что ж, суть вполне понятна и проста. Попробуем написать набор из акторов, один из которых по запросу генерирует следующее число Фибоначчи, а другой запрашивает генерацию.
Подготовка
Для начала импортируем необходимые классы:
|
|
Затем опишем сообщения, которые могут пересылать акторы:
|
|
Актор Generator
Данный актор будет вычислять новые числа Фибоначчи. Для того, чтобы это действительно был актор, нам нужно унаследовать его от scala.actors.Actor
и реализовать функцию def act() { .. }
. Внутри функция должна иметь конструкцию receive { .. }
, которая и займется обработкой сообщений:
|
|
Актор Sender
Данный актор будет иметь схожую с предыдущим актором архитектуру, потому приведу просто его код с некоторыми пояснениями:
|
|
Запуск
Для всего этого нам понадобится только несколько строчек:
|
|
Также я попробовал запускать акторы в другом порядке - сначала Sender
, а потом Generator
, но даже так все отработало прекрасно.
Заключение
Все же Scala предлагает мощную поддержку многопоточности “из коробки”. Уже после того, как я “поиграл” с акторами, я выяснил, что текущая версия Scala имеет немного другую систему, которая разительно отличается от той, с которой я впервые познакомился. Также несомненно радует наличие таких вещей, как реакторы, расписания, каналы и др. В целом это во много раз лучше, чем создавать громоздкую конструкцию из потоков на чистой Java.