Как улучшить время сканирования почтовых ящиков у актеров Scala - PullRequest
2 голосов
/ 02 ноября 2010

Я создал следующий пример актеров в Scala: http://pastebin.com/pa3WVpKy Без регулирования (уменьшение количества сообщений SendMoney), которое происходит в строках:

val processed = iterations - counter.getCount/2
if (processed < i - banksCount * 5) Thread.sleep(1)

обработка сообщений в этом тесте очень медленная (особенно, когда в банке мало участников).

Это потому, что почтовые ящики актеров заполнены сообщениями SendMoney, а получение сообщений ReadAccountResponse занимает много времени (они обычно находятся почти в конце почтового ящика, и весь почтовый ящик должен быть отсканирован). Как улучшить время проверки почтового ящика в таких случаях? Может быть, есть возможность определить некоторые сообщения как высокоприоритетные? Было бы здорово иметь два почтовых ящика - один для обычных сообщений и один для высокоприоритетных. Почтовый ящик с высоким приоритетом может быть проверен первым. Также метод «Ответить» может автоматически отправлять сообщения в почтовый ящик с высоким приоритетом. Или, может быть, создать два почтовых ящика - для обычных сообщений и ответов? Какое у тебя мнение?

С уважением Войцех Дурчиньский

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

Одним из потенциально хороших решений этой проблемы будут полупрозрачные функции Филиппа Халлера, в которых компилятор scala рефлекторно предоставляет информацию о том, с какими типами объектов может соответствовать выражение соответствия.Затем почтовые ящики субъекта могут быть проиндексированы по классу сообщений, и поиск потенциально может быть значительно быстрее, особенно в сценарии «иголки в стоге сена».Вы можете видеть это довольно просто.Похоже, что Прозрачный проект некоторое время не работает, будем надеяться, что он скоро возобновится!

0 голосов
/ 03 ноября 2010

Я полагаю, что у актеров Лифта есть именно эта встроенная приоритетность: вместо переопределения одного метода "акта", есть ряд различных методов (не уверен в точных именах), которые могут быть реализованы в зависимости от приоритета действия.

Я не уверен, решает ли это проблему замедления сканирования , хотя

...