Учитывая некоторую проблему параллелизма, что бы вы искали, чтобы решить, использовать ли актеров или нет?
Сначала я хотел бы определить проблему ... является ли основная мотивация ускорением вложенного цикла или рекурсии? Если так, то простой подход, основанный на задачах или подходе с параллельным циклом, вероятно, будет работать хорошо для вас (а не для участников).
Однако если у вас более сложная система, которая включает зависимости и координирует общее состояние, тогда может помочь подход с участием акторов. В частности, используя акторы и семантику передачи сообщений, вы часто можете избежать использования явных блокировок для защиты общего состояния, фактически делая копии этого состояния (сообщения) и реагируя на них.
Вы можете сделать это довольно легко с классическими проблемами синхронизации, такими как обедающие философы и проблема спящих парикмахеров. Но вы также можете использовать «актер», чтобы помочь с более современными шаблонами, то есть ваш фасад может быть актером, ваш вид модели и контроллер также могут быть актерами, которые общаются друг с другом.
Еще одна вещь, которую я заметил, заключается в том, что семантика акторов может быть изучена большинством разработчиков и «безопаснее», чем их заблокированные аналоги. Это связано с тем, что они повышают уровень абстракции и позволяют сосредоточиться на координации доступа к этим данным, а не на защите доступа к данным с помощью блокировок. В качестве примера представьте, что у вас есть простой класс с элементом данных. Если вы решите установить блокировку в этом классе для защиты доступа к этому элементу данных, то любые методы этого класса должны будут гарантировать, что они получают доступ к этому элементу данных под блокировкой. Это становится особенно проблематичным, когда другие (или вы) изменяют класс позднее, они должны запомнить , чтобы использовать эту блокировку.
С другой стороны, если этот класс становится актером, а элемент данных становится буфером или портом, с которым вы общаетесь с помощью сообщений, вам не нужно забывать брать блокировку, потому что семантика встроена в буфер, и вы будете Ясно знаю, собираетесь ли вы блокировать это в зависимости от типа буфера.
-Rick